私は自分のレールアプリケーションで深いクローン処理を行い、ツリーの子ノードとその子孫とその関連付けを削除する再帰的削除プロセスを持っています。これらのルーチンはどちらも問題があります。touch => trueが関係に適用されます。 1つのレコードを更新してすべての親レコードにアソシエーションとツリー構造を反映させるだけの場合は大丈夫ですが、一括作成や削除を処理するときは、その呼び出しの間タッチを無効にするのが理にかなっています。ActiveRecordのブロック期間中はタッチを無効にする
オブジェクトのタッチメソッドをアクティブにしないコードを実行するブロックを受け入れるメソッドを定義する方法について、私は方向性を探しています。
私はおそらく収穫の前に世界全体を設定するべきだと思っていますか? touchメソッドが無効になっていることを示す変数。次に、touchメソッドをオーバーライドして、superを呼び出す前にこの変数をチェックします(場合によってはそうでない場合もあります)。
これを実際のコードに固めてください。 :)
こんにちは!どのようにして最終的にこれにアプローチしましたか?私はテストのための同様のケースを検討している:http://stackoverflow.com/questions/18922864/how-to-disable-belongs-to-touch-option-in-rspec-tests-for-rails-models – dgilperez
私は決してこれを回避した。私はちょうど正しい順序で物事が行われていない限り、更新は非常に遅く、削除するときにエラーを起こしやすいということを受け入れなければなりませんでした。 Rails 3はモデル全体を保存しようとせず、タイムスタンプを孤立して更新するほうがはるかに優れている点で優れています。このプロジェクトが依然として詰まっているRails 2には、このような運がありません! :D –