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

这里有一个扩展 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

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

于 2008-11-25T02:20:53.310 回答
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

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

create_without_callbacks或者update_without_callbacks

于 2010-12-18T22:29:01.203 回答