Rails:是不是有跳过 after_save 过滤器的 save_without_validation 等效项?
Posted
技术标签:
【中文标题】Rails:是不是有跳过 after_save 过滤器的 save_without_validation 等效项?【英文标题】:Rails: Is there an equivalent to save_without_validation which skips after_save filters?Rails:是否有跳过 after_save 过滤器的 save_without_validation 等效项? 【发布时间】:2008-11-24 22:25:55 【问题描述】:我有一个 after_save 过滤器,我不想在特定实例中触发它。有没有类似于 save_without_validation 的方法?
谢谢,
【问题讨论】:
【参考方案1】:使用 rails 2 时,您可以通过以下方式调用私有方法 create_without_callbacks
:
@my_obj.send(:create_without_callbacks)
【讨论】:
【参考方案2】:这里有一个扩展 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
那么你在块中所做的任何事情都不会执行回调。
【讨论】:
【参考方案3】:您可以像这样设置和重置回调:
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
方法周围添加这些。
【讨论】:
【参考方案4】:对于 Rails 2,您还可以使用以下方法:
create_without_callbacks
或 update_without_callbacks
【讨论】:
以上是关于Rails:是不是有跳过 after_save 过滤器的 save_without_validation 等效项?的主要内容,如果未能解决你的问题,请参考以下文章