特定のインスタンスでトリガーしたくない after_save フィルターがあります。save_without_validation と同様にこれを行う方法はありますか?
ありがとう、
特定のインスタンスでトリガーしたくない after_save フィルターがあります。save_without_validation と同様にこれを行う方法はありますか?
ありがとう、
rails 2を使用する場合、次のようにしてプライベートメソッドを呼び出すことができますcreate_without_callbacks
。
@my_obj.send(:create_without_callbacks)
Rails 2の場合、次の方法も使用できます。
create_without_callbacks
またupdate_without_callbacks
次のようにコールバックを設定およびリセットできます。
Post.after_update.reject! {|callback| callback.method.to_s == 'fancy_callback_on_update' }
Post.after_create.reject! {|callback| callback.method.to_s == 'fancy_callback_on_create' }
Post.after_create :fancy_callback_on_create
Post.after_update :fancy_callback_on_update
save
カスタムメソッドの周りにこれらを追加できます。
ActiveRecord を拡張してコールバック スキップを提供する良い例がここにあります: http://weareintegrum.com/?p=10
アイデアは、ブロックを受け入れるskip_callbackと呼ばれるActiveRecordのメソッドを作成することです:
def self.skip_callback(callback, &block)
method = instance_method(callback)
remove_method(callback) if respond_to?(callback)
define_method(callback){ true }
begin
result = yield
ensure
remove_method(callback)
define_method(callback, method)
end
result
end
ブロック内で何をしても、コールバックは実行されません。