所以,我当然是一个Rails新手,我遇到了一个相当普遍的问题,但我找不到答案。
我有一个模特 Foo
喜欢这个:
class Foo < ActiveRecord::Base
has_many :bars
end
酒吧belongs_to Foo,一切正常。现在我想创建一个Foo并同时构建Bar。喜欢这个:
f = Foo.new(:baz => 'baz')
bars.each do |b|
f.bars.build(:bizzy => b[:bizzy])
end
f.save
我知道这不起作用,因为父记录不存在,所以关联不存在,但必须有一种方法来做到这一点。我暂时通过编辑来解决这个问题:
f = Foo.new(:baz => 'baz')
f.save
f = Foo.find(:first, :conditions => {:baz => 'baz'})
bars.each do |b|
f.bars.create(:bizzy => b[:bizzy])
end
但那并不干净,而且一切都令人不快。
这样做的正确方法是什么?
在第一行你可以使用 create
代替 new
。你不需要 f.bars.create
要么 f.bars.build
,因为 bar
对象已经存在。我会这样做:
f = Foo.create(:baz => 'baz')
bars.each do |b|
f.bars << b
end
我个人不会迭代 bars
,但只是使用 update_all
:
f = Foo.create(:baz => 'baz')
bars.update_all(:foo_id => f.id)
编辑:可以在不保存记录的情况下执行此操作。这对我有用:
f = Foo.new(:baz => 'baz')
bars.each do |b|
f.bars << b
end
f.save
在第一行你可以使用 create
代替 new
。你不需要 f.bars.create
要么 f.bars.build
,因为 bar
对象已经存在。我会这样做:
f = Foo.create(:baz => 'baz')
bars.each do |b|
f.bars << b
end
我个人不会迭代 bars
,但只是使用 update_all
:
f = Foo.create(:baz => 'baz')
bars.update_all(:foo_id => f.id)
编辑:可以在不保存记录的情况下执行此操作。这对我有用:
f = Foo.new(:baz => 'baz')
bars.each do |b|
f.bars << b
end
f.save