繁体   English   中英

如何从视图中修改控制器中的变量(红宝石在轨道上)

[英]How can I modify a variable in the controller from the view (ruby on rails)

我正在制作一个投资组合页面。 在首页上,我有一个“关于”部分,其中有我自己的个人描述。 我希望能够动态更改此内容(而不是硬编码的html)。

我希望描述可以是文本变量或字符串,可以通过视图部分中的表单进行修改。

问题1.我应该如何在控制器中声明此变量? 2.如何从视图中的表单访问和更改它? 3.我的问题有更好的解决方案吗?

唯一的方法是将更新的值发送到控制器。 您需要在投资组合页面上有一个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 %>

没有更多背景信息,这就是我能提供的最好的。

您将需要连接数据库来存储和检索动态内容。 如果使用@ like定义变量,则可以在视图中访问它。

@about= Me.last.about

其中Me可能是您将信息保存在其中的模型,而Me.last将是该模型的实例。 您可以通过更新模型来更新此信息,例如

Me.last.update_attributes :about=> params[:about]

其中params[:about]是表单中来自字段的参数。

我建议您遵循指南,以获取完整的解决方案。 下面是用户要更新某些内容的主要步骤。 此代码不是完整的解决方案。

您的表单会将更新后的内容提交给另一个控制器操作(通过另一条路线)。

<%= 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM