11

したがって、私は確かに Rails の初心者であり、かなり一般的な問題に遭遇していますが、ここで答えを見つけることができません。

私はこのようなモデルを持っていますFoo:

class Foo < ActiveRecord::Base
  has_many :bars
end

バーは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

しかし、それはきれいではなく、どこまでも不快です。

これを行う正しい方法は何ですか?

4

1 に答える 1

10

最初の行では、create代わりにnew. オブジェクトが既に存在するため、f.bars.createorは必要ありません。私はこれを行います:f.bars.buildbar

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
于 2012-04-10T13:32:29.577 に答える