微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/ruby/267860.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐