ruby-on-rails – Rails不会触发我的after_commit回调

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails不会触发我的after_commit回调前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你好,我有一个特殊的问题.我使用after_commit回调来发送通知,但似乎根本没有触发回调.简化情况如下:
class Message < ActiveRecord::Base
  after_commit :do_something

  def do_something
    raise 'Doing something'
  end
end

然后我打算在打开控制台并创建消息时看到加注.但没有任何反应.此外,如果我完全删除’do_something’方法,rails甚至不会抱怨.请注意,这不是使用事务夹具的测试.我甚至看到了db中提交的记录.我的rails版本是3.0.9.感谢任何帮助,特别是如果它是好的:-)

编辑:我后来了解到,当我将代码部署到另一台机器时,会触发回调DID.所以它必须是我的设置.我仍然会感谢您对可能导致此问题的看法.

Edit2:来自评论.

> DB是MysqL,因此存在事务.
>指定回调的操作没有帮助(:on =>:create).
>我需要after_commit而没有其他回调

解决方法

大卫在问题评论中提到了这种行为的解释.

Transaction Callbacks documentation

“If any exceptions are raised within one of these callbacks,they will
be ignored so that they don’t interfere with the other callbacks. As
such,if your callback code could raise an exception,you’ll need to
rescue it and handle it appropriately within the callback.”

也可以看看:

> Rails Github Issue 3205
> Pull request #11123

原文链接:https://www.f2er.com/ruby/267860.html

猜你在找的Ruby相关文章