他のモデルから継承するモデルの関連付けを構築しようとする AR に問題があります。問題は、呼び出しが save メソッドを実行する前に、関連するモデルがデータベースに保存されていることです。
このページで詳細を見つけましたhttp://techspry.com/ruby_and_rails/active-records-or-push-or-concat-method/
それは本当に奇妙です。なぜ AR は関連付けに追加されたモデルを ( << メソッドで) 自動的に保存するのでしょうか? 親がすでに存在する場合でも、save メソッドを呼び出す必要があることは明らかです。この呼び出しを防ぐことができます
@user.reviews.build(good_params)
しかし、これは関連付けに階層があるコンテキストでは問題になります。たとえば、Hunter が :animals を多く持っていて、Dog と Cat が Animal を継承している場合、これを行うことはできません。
@hunter.dogs.build
@hunter.cats.build
代わりに、私たちは立ち往生しています
@hunter.animals << Cat.new
@hunter.animals << Dog.new
Cat/Dog クラスに検証がない場合、オブジェクトは自動的にデータベースに保存されます。この動作を防ぐにはどうすればよいですか?