Ruby on Rails:将参数从其他控制器传递到模型

时间:2010-01-26 23:52:39

标签: ruby-on-rails

我有一个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| %>

我不需要/想要嵌套关系。我只需要将视图中指定的一些额外参数传递给模型。

谢谢!

3 个答案:

答案 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]