4

特定のインスタンスでトリガーしたくない after_save フィルターがあります。save_without_validation と同様にこれを行う方法はありますか?

ありがとう、

4

4 に答える 4

1

rails 2を使用する場合、次のようにしてプライベートメソッドを呼び出すことができますcreate_without_callbacks

@my_obj.send(:create_without_callbacks)
于 2010-12-18T22:31:14.053 に答える
0

Rails 2の場合、次の方法も使用できます。

create_without_callbacksまたupdate_without_callbacks

于 2010-12-18T22:29:01.203 に答える
0

次のようにコールバックを設定およびリセットできます。

  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カスタムメソッドの周りにこれらを追加できます。

于 2010-12-16T04:01:48.063 に答える
0

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

ブロック内で何をしても、コールバックは実行されません。

于 2008-11-25T02:20:53.310 に答える