我有一个模型用户,有大约40个表单字段。然后我在表单中有3个属于Child模型的字段。它们是:年龄,性别,:家庭。
我查看了accepts_nested_attributes_for的文档,并对如何将Child模型保存到数据库感到困惑。
在我的UsersController中,我有以下内容:
@user = User.new(params[:user])
...
@user.save
现在在Rails文档中,他们有一个名为Member的模型,在其中,has_many:posts和accepts_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 [:user]等效的params [:member]。我的3个孩子的领域,:年龄,性别,和:家庭在params [:age],params [:gender]和params [:home]。所以我想我的问题是如何保存用户模型并将3个子字段保存在子模型中?
答案 0 :(得分: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
对象的一部分,并且您应该能够一次创建user
和child
对象。 / p>
您是child
还是children
accepts_nested_attributes_for
完全取决于user
和child
之间的关系。如果只有user
has_one :child
,则上述内容就足够了。如果是has_many
关系,则您需要将符号更改为:children
并将@user.build_child
更改为@user.children.build.
此外,请不要忘记将(child|children)_attributes
添加到attr_accessible
模型上的user
,否则您将无法通过表单提交进行大量分配。< / p>