1

場合によっては、Rails モデルのメソッド呼び出しをキャッチして削除したいと考えています。

のようなものが欲しいのですremove_methodが、それではメソッド呼び出しが削除されます。

たとえばbefore_save、モデルにコールバックがある場合、クラスに拡張されたモジュールを使用してそれをキャッチし、その呼び出しを削除または防止したい場合がありますbefore_save

これは可能ですか?

ありがとう。

4

2 に答える 2

4

編集:

私が投稿した以前の回答は機能しません-機能したかどうかはわかりませんが、過去に使用したことをぼんやりと思い出します. たとえば、サブクラスのコンテキストでコールバックをスキップするには、 を使用する必要がありますskip_callback。使用例:

skip_callback :save, :before, :callback_method_name

または、特定の条件下でコールバックをスキップする場合:

skip_callback :save, :before, :callback_method_name, if: :some_condition_true?

reset_callbacksコールバックの型をパラメータとして取るメソッドもあります。たとえば、reset_callbacks :save. _save_callbacksコールバックには、_create_callbacks、 などのクラス メソッドを介してアクセスできますreset_callbacks。Rails 自体が関連付けのコールバック、つまり:before_save_collection_association.

通常の Ruby オブジェクトについて話している場合は、サブクラスでメソッドをオーバーライドできます。スーパークラスと同じ名前のメソッドを定義するだけです。基本クラスと同じインスタンス メソッドを定義するモジュールを含めることで、サブクラスの基本クラス メソッドをオーバーライドすることもできます。

于 2012-12-07T23:43:29.923 に答える
-1

次のようにクリアしようとしましたかbefore_save

before_save ->{}
于 2012-12-07T23:38:28.067 に答える