場合によっては、Rails モデルのメソッド呼び出しをキャッチして削除したいと考えています。
のようなものが欲しいのですremove_method
が、それではメソッド呼び出しが削除されます。
たとえばbefore_save
、モデルにコールバックがある場合、クラスに拡張されたモジュールを使用してそれをキャッチし、その呼び出しを削除または防止したい場合がありますbefore_save
。
これは可能ですか?
ありがとう。
場合によっては、Rails モデルのメソッド呼び出しをキャッチして削除したいと考えています。
のようなものが欲しいのですremove_method
が、それではメソッド呼び出しが削除されます。
たとえばbefore_save
、モデルにコールバックがある場合、クラスに拡張されたモジュールを使用してそれをキャッチし、その呼び出しを削除または防止したい場合がありますbefore_save
。
これは可能ですか?
ありがとう。
編集:
私が投稿した以前の回答は機能しません-機能したかどうかはわかりませんが、過去に使用したことをぼんやりと思い出します. たとえば、サブクラスのコンテキストでコールバックをスキップするには、 を使用する必要があります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 オブジェクトについて話している場合は、サブクラスでメソッドをオーバーライドできます。スーパークラスと同じ名前のメソッドを定義するだけです。基本クラスと同じインスタンス メソッドを定義するモジュールを含めることで、サブクラスの基本クラス メソッドをオーバーライドすることもできます。
次のようにクリアしようとしましたかbefore_save
:
before_save ->{}