0

我有一个模型用户,它有大约 40 个表单字段。然后我在表单中有 3 个属于 Child 模型的字段。它们是:年龄,:性别,:家庭。

我查看了accepts_nested_attributes_for 的文档,对如何将子模型保存到数据库感到有些困惑。

在我的 UsersController 中,我有以下内容:

@user = User.new(params[:user])
...
@user.save

现在在 Rails 文档中,他们有一个名为 Member 的模型,在其中,它 has_many :posts 和 accept_nested_attributes_for :posts。他们像这样保存成员模型:

params = { :member => {
  :name => 'joe', :posts_attributes => [
    { :title => 'Kari, the awesome Ruby documentation browser!' },
    { :title => 'The egalitarian assumption of the modern citizen' },
    { :title => '', :_destroy => '1' } # this will be ignored
  ]
}}

member = Member.create(params['member'])

但是我已经有了 params[:member] 和 params[:user] 的等价物。我的 3 个子字段:age、:gender 和 :home 在 params[:age]、params[:gender] 和 params[:home] 中。所以我想我的问题是如何保存用户模型并将 3 个子字段保存在子模型中?

4

1 回答 1

0

您需要正确设置表单以使用accepts_nested_attributes_for.

因此,在您的User模型中,您将拥有:

accepts_nested_attributes_for :child

在您的表格中,您可以这样做:

form_for @user do |f|
  f.text_field :name #or whatever your user attributes

  f.fields_for :child, @user.build_child do |child|
    child.text_field :age
    #etc
  end
end

现在,rails 应该将对象构建为child对象的一部分user,并且您应该能够一次性创建userandchild对象。

是 putchild还是childrenforaccepts_nested_attributes_for完全取决于 auser和 a 之间的关系child。如果 a userjust has_one :child,那么以上就足够了。如果是has_many关系,您需要将符号更改为:children并将其更改@user.build_child@user.children.build.

另外,不要忘记添加(child|children)_attributes到您attr_accessibleuser模型中,否则您将无法通过表单提交来批量分配它们。

于 2013-02-23T20:57:09.617 回答