Ruby on rails Rails:是否有一个等价于在不进行验证的情况下保存过滤器后跳过的方法?

Ruby on rails Rails:是否有一个等价于在不进行验证的情况下保存过滤器后跳过的方法?,ruby-on-rails,after-save,Ruby On Rails,After Save,我有一个after_save过滤器,我不想在特定实例中触发它。有没有一种方法可以像保存_而不进行_验证一样做到这一点 谢谢,这里有一个扩展ActiveRecord以提供回调跳过的好例子: 其想法是在ActiveRecord上创建一个名为skip_callback的方法,该方法接受一个块: def self.skip_callback(callback, &block) method = instance_method(callback) remove_method(callbac

我有一个after_save过滤器,我不想在特定实例中触发它。有没有一种方法可以像保存_而不进行_验证一样做到这一点


谢谢,

这里有一个扩展ActiveRecord以提供回调跳过的好例子:

其想法是在ActiveRecord上创建一个名为skip_callback的方法,该方法接受一个块:

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

那么,在块内执行的任何操作都不会执行回调。

您可以像这样设置和重置回调:

  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
方法周围添加这些方法。

对于Rails 2,您还可以使用以下方法:


create\u without\u callbacks
update\u without\u callbacks
使用rails 2时,可以通过执行以下操作调用私有方法
create\u without\u callbacks

@my_obj.send(:create_without_callbacks)