親が変更されたときに子モデルに属性を設定したい
次に例を示します。
create_table "children", :force => true do |t|
t.integer "parent_id"
t.string "parent_type"
t.integer "foo_id"
end
create_table "fathers", :force => true do |t|
t.integer "foo_id"
end
create_table "mothers", :force => true do |t|
t.integer "foo_id"
end
create_table "foos", :force => true do |t|
end
class Foo < ActiveRecord::Base
end
class Child < ActiveRecord::Base
belongs_to :parent, :polymorphic => true
belongs_to :foo
end
class Father < ActiveRecord::Base
belongs_to :foo
end
class Mother < ActiveRecord::Base
belongs_to :foo
end
ここで、次を実行すると、child.foo_id が親から設定されるようになります。
foo = Foo.new {|foo| foo.id = 1}
parent = Father.new {|father| father.foo = foo}
child = Child.new
child.parent = parent
コールバックなどfoo_id
ではなく、すぐに設定する必要があります。before_validation
これは簡単な例ですが、実際にはもっと多くのポリモーフィック型があります。after_add
これは、Father と Motherのアソシエーションのコールバックで実現できることはわかっていますhas_many
が、可能であれば、has_many アソシエーションを追加する必要はなく、コードをさらに多くの場所に追加する必要があるためです。これを行う方法はありますか?