2

特定の before_save コールバックが ActiveRecord の他のすべての before_save コールバックの後に実行されるようにする方法はありますか?

before_save 機能を含む外部ライブラリを作成していますが、効果的にするには、他のすべての後に呼び出す必要があります。私はそれを回避することができますが、私が本当にしたくない汚れた属性を放棄する必要があります!

- 編集 -

モデルを保存した後もダーティな属性が保持されていることに気づきませんでした。したがって、 @page.attribute_was は .in の後で引き続き機能しyieldますaround_save

4

2 に答える 2

5

最後に実行したいコールバックをコールバックにすることができaround_saveます。利用可能なコールバックのリストを確認し、コールバックの一部に別のコールバック「バケット」を使用して、それらが目的の順序で確実に実行されるようにすることができるかどうかを確認してください。

それでも複数のコールバックが発生し、最後にトリガーする必要がある場合は、通常のコールバックをコールバックとして登録し、最後に実行したいコールバックをコールバックとして登録し、それから単一のコールバックを登録するbefore_saveなど、カスタム コールバックを作成することをお勧めします。これら 2 つのグループのコールバックを実行します ( )。これを行う方法の詳細については、を参照してください。define_model_callbacks :split_savebefore_savebefore_split_saveafter_split_savebefore_saverun_callbacks :split_saveActiveModel::Callbacks

于 2012-05-31T18:34:43.707 に答える
1

したがって、ダーティな属性は保存後に消去されるため、コールbefore_<type>バックの代わりに順序付けられたコールバックを使用して、ダーティな属性を放棄することを回避するためでした。after_<type>changes

ただし、コールバックchangesで引き続きアクセスできることが判明しました。after_<type>

私は、Vestal Versionsのコードを調べて、彼らがどのようにそれを行ったかを確認した後にのみ、これを解決しました。

フェイスパーム。

私はカールの答えを受け入れています。なぜなら、それはかなりひどく提示された質問に対するかなり完全な答えだからです。

于 2012-06-07T12:57:19.977 に答える