5

Rails2とRails3の両方で、:autosave => true a has_manyアソシエーションの場合、コレクションはループスルーされ、各子アソシエーションでsave(:validate => false)が呼び出されます。何故ですか?その子オブジェクトに対して実行するにはbefore_validationコールバックが必要ですが、検証をスキップするのは保存であるため、必要ありません。

これを回避する良い方法は何ですか?そして、検証をスキップする目的は何ですか?

どんな助けでも大歓迎です!ありがとう!

4

1 に答える 1

6

検証実行されます。検証フェーズと保存フェーズがあります。AutoSaveは、2つのモデルに対してこれらの2つのフェーズを同時に実行しようとします。したがって、親モデルを保存すると、親モデルが検証され、次にその自動保存の子が検証されます。検証に合格すると、保存フェーズが発生し、親モデルと子モデルが保存されます(ただし、検証はスキップされます)。その理由は、検証がすでに実行されているためです。

before_saveコールバック中に親の内部に子モデルを構築しようとしたときに、問題が発生していました。したがって、関連付けられたオブジェクトは、検証フェーズ中に検証されるためにそこにありませんでした。

于 2012-07-13T16:07:22.610 に答える