Rails:有没有相当于save_without_validation跳过after_save过滤器?

时间:2008-11-24 22:25:56

标签: ruby-on-rails after-save

我有一个after_save过滤器,我不希望在特定实例中触发。有没有办法与save_without_validation类似?

谢谢,

4 个答案:

答案 0 :(得分:1)

使用rails 2时,您可以通过执行以下操作来调用私有方法create_without_callbacks

@my_obj.send(:create_without_callbacks)

答案 1 :(得分:0)

有一个很好的例子,可以在这里扩展ActiveRecord以提供回调:http://weareintegrum.com/?p=10

我们的想法是在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

然后你在块内做的任何事情都不会执行回调。

答案 2 :(得分: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方法添加这些内容。

答案 3 :(得分:0)

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

create_without_callbacksupdate_without_callbacks