我希望在after_commit
对象时跳过destroy
回调,而不使用on
语法明确指定方法列表。即类似的东西:
after_commit :foo, except: [:destroy]
答案 0 :(得分:3)
我已经找到了在Ruby Tips上执行此操作的方法:
after_commit :foo, if: :persisted?
或更复杂的条件:
after_commit, :foo, if: Proc.new {|record| record.persisted? && [...]}
答案 1 :(得分:3)
在 Rails 6 中,您可以使用 after_save_commit
作为 after_commit :foo, on: [:create, :update]
的快捷方式
after_save_commit :foo
这将跳过销毁回调。
答案 2 :(得分:2)
最短的解决方案是@dimid共享的解决方案,但我相信,现在务实的方法是列出您要处理的事件,而忽略:destroy
。目前有3个可用的:on
选项,:create
,:update
和:destroy
。
在创建&上执行foo
更新:
after_commit :foo, :on => [:create, :update]
可替换地:
after_commit :foo, on: :create
after_commit :foo, on: :update
或者从Rails 5(https://github.com/rails/rails/pull/22516)开始,也可以:
after_create_commit :foo
after_update_commit :foo