如何正确使用`after_commit`?

时间:2018-02-10 05:11:20

标签: ruby-on-rails ruby

我有一个巨大的模型,有一堆base.html回调。

after_commit

问题出于某种原因,尽管在此数据库中保存了记录,但有时 after_commit :a, on: [:create, :update] after_commit :b, on: :create after_commit :c, on: :create after_commit :d, on: [:create, :update] after_commit :e, on: :destroy after_commit :f, on: :destroy 上的回调无法运行。

我怀疑其中一个回调引发了异常,导致其他回调无法执行。 (或者还有其他原因吗?)

即使其他一些回调未能执行,我怎么能以执行的方式编写回调?

1 个答案:

答案 0 :(得分:0)

见这里:http://guides.rubyonrails.org/active_record_callbacks.html#transaction-callbacks

如果某个事务中的回调失败,则其余部分将不会执行。

相反,请确保在回调方法中完全处理异常:

def a
   begin
   # try to do the action
   rescue
   # if you code fails it will go here, and you should clean it up appropriately
   ensure
   # something that will always execute, pass or fail
   end
end