如何从视图修改控制器中的变量(ruby on rails)
How can I modify a variable in the controller from the view (ruby on rails)
我正在 rails 制作作品集页面。在首页上,我有一个 "About" 部分,其中包含我对自己的个人描述。我希望能够动态更改它(不是硬编码 html)。
我希望描述是一个文本变量或字符串,我可以通过视图部分中的表单进行修改。
问题
1. 我应该如何在控制器中声明这个变量?
2. 如何从视图中的表单访问和更改它?
3.我的问题有更好的解决方案吗?
您将需要连接数据库来存储和检索动态内容。如果您使用 @
定义变量,则可以访问视图中的变量;
@about= Me.last.about
其中 Me 可以是保存信息的模型,Me.last 将是该模型的实例。您可以通过更新模型来更新此信息,例如
Me.last.update_attributes :about=> params[:about]
其中 params[:about]
是表单字段中的参数。
我建议遵循 guide 以便您获得完整的解决方案。下面是用户更新某些内容的主要步骤。此代码不是完整的解决方案。
您的表单会将更新后的内容提交给另一个控制器操作(通过另一条路线)。
<%= form_for @user do |f| %>
在该控制器中,您将存储内容(通常在数据库中)。
def update
@user = User.find(params[:id])
@user.update(user_params)
redirect_to :back
end
原来的控制器动作会有一个变量,它从你存储它的地方获取内容
def show
@user = User.find(params[:id])
end
唯一方法是将更新后的值发送到您的控制器。您的投资组合页面需要 form
:
#config/routes.rb
resources :users do
resources :portfolios #-> url.com/users/:user_id/portfolios/:id
end
#app/controllers/portfolios_controller.rb
class PortfoliosController < ApplicationController
def show
@user = User.find params[:user_id]
end
end
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def update
@user = User.find params[:id]
@user.update user_params
end
private
def user_params
params.require(:user).permit(:about)
end
end
#app/views/portfolios/show.html.erb
<%= form_for @user do |f| %>
<%= f.text_field :about %>
<%= f.submit %>
<% end %>
没有更多的上下文,这是我能给出的最好的。
我正在 rails 制作作品集页面。在首页上,我有一个 "About" 部分,其中包含我对自己的个人描述。我希望能够动态更改它(不是硬编码 html)。
我希望描述是一个文本变量或字符串,我可以通过视图部分中的表单进行修改。
问题 1. 我应该如何在控制器中声明这个变量? 2. 如何从视图中的表单访问和更改它? 3.我的问题有更好的解决方案吗?
您将需要连接数据库来存储和检索动态内容。如果您使用 @
定义变量,则可以访问视图中的变量;
@about= Me.last.about
其中 Me 可以是保存信息的模型,Me.last 将是该模型的实例。您可以通过更新模型来更新此信息,例如
Me.last.update_attributes :about=> params[:about]
其中 params[:about]
是表单字段中的参数。
我建议遵循 guide 以便您获得完整的解决方案。下面是用户更新某些内容的主要步骤。此代码不是完整的解决方案。
您的表单会将更新后的内容提交给另一个控制器操作(通过另一条路线)。
<%= form_for @user do |f| %>
在该控制器中,您将存储内容(通常在数据库中)。
def update
@user = User.find(params[:id])
@user.update(user_params)
redirect_to :back
end
原来的控制器动作会有一个变量,它从你存储它的地方获取内容
def show
@user = User.find(params[:id])
end
唯一方法是将更新后的值发送到您的控制器。您的投资组合页面需要 form
:
#config/routes.rb
resources :users do
resources :portfolios #-> url.com/users/:user_id/portfolios/:id
end
#app/controllers/portfolios_controller.rb
class PortfoliosController < ApplicationController
def show
@user = User.find params[:user_id]
end
end
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def update
@user = User.find params[:id]
@user.update user_params
end
private
def user_params
params.require(:user).permit(:about)
end
end
#app/views/portfolios/show.html.erb
<%= form_for @user do |f| %>
<%= f.text_field :about %>
<%= f.submit %>
<% end %>
没有更多的上下文,这是我能给出的最好的。