我有一个users_controller:
@user = User.new(params[:user])
将参数传递给工作正常的用户模型。
我需要通过用户控制器将一些标记为“profile”的附加参数传递给用户模型。
这不起作用:
@user = User.new(params[:user, :profile])
这两个都没有:
@user = User.new(params[:user], params[:profile])
我尝试了各种其他类似的东西,以便将视图中的配置文件参数转换为此模型。
我正在使用fields_for,可以将这些字段放入用户控制器:
<% fields_for "profile" do |fa| %>
我不需要/想要嵌套关系。我只需要将视图中指定的一些额外参数传递给模型。
谢谢!
答案 0 :(得分:1)
fields_for通常用于将params分配给相关模型,因此它对数据结构做出了一些特殊的假设。
如果模型中有profile属性,则可以将profile参数作为params [:user]集合的一部分,这将正确分配属性。
您可以通过命名字段来执行此操作:
text_field_tag(user[profile], "val")
text_field_tag(user[profile][name], "val")
答案 1 :(得分:0)
谢谢托比!
只是为了补充他的答案。 我不得不把
attr_accessor :profile
在用户模型中访问该元素。
所以整个事情看起来像:
查看:强>
<%= text_field_tag :profile, params[:profile] %></p>
<强>控制器:强>
@user.profile = params[:profile]
<强>型号:强>
attr_accessor :profile
之后,我可以像访问用户模型中的常规元素一样访问profile元素。
答案 2 :(得分:-1)
尝试:
@user = User.new(params[:user])
@user.profile = Profile.new(params[:profile])
或
@user = User.new(params[:user])
@user.attributes = params[:profile]