私は以下のモデルを持っています:
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
ビジネス ロジックでは、オブジェクトを初期化するときにfoo
f = Foo.new
3 つのバーも初期化する必要があります。これどうやってするの?
私は以下のモデルを持っています:
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
ビジネス ロジックでは、オブジェクトを初期化するときにfoo
f = Foo.new
3 つのバーも初期化する必要があります。これどうやってするの?
after_create
( を呼び出した後)Foo.create
またはafter_initialize
( を呼び出した後Foo.new
) をFoo.rb
after_create :create_bars
def create_bars
3.times do
self.bars.create!({})
end
end
または:
after_initialize :create_bars
def create_bars
3.times do
self.bars.new({})
end if new_record?
end
あなたはできる:
コードは次のようになります。
class Foo < ActiveRecord::Base
has_many :bars, autosave: true
after_initialize :init_bars
def init_bars
# you only wish to add bars on the newly instantiated Foo instances
if new_record?
3.times { bars.build }
end
end
end
親の Foo インスタンスを破棄するときに Bar インスタンスを破棄したい場合は、オプションdependent: :destroy を追加できます。