你好,我有一个奇怪的问题。我使用 after_commit 回调函数来发送通知,但是似乎这个回调根本没有触发。简化后的情况看起来像这样:
class Message < ActiveRecord::Base
after_commit :do_something
def do_something
raise 'Doing something'
end
end
当我打开控制台并创建一条消息时,我期望能看到增加操作。但是什么都没有发生。此外,即使我完全删除“do_something”方法,Rails 也不会抱怨。请注意,这不是使用事务性固件进行的测试。我甚至在数据库中看到了记录提交。我的 Rails 版本是 3.0.9。谢谢任何帮助,特别是如果它很好 :-)
编辑:后来我发现在将代码部署到另一台机器时触发了回调。所以肯定是我的设置有问题。但我仍然感激您对可能导致此问题的原因的洞察力。
编辑2:从评论中得知:
- 数据库是 MySQL,因此存在事务。
- 指定回调函数的动作没有帮助(:on => :create)。
- 我需要使用 after_commit 而非其他回调函数。
after_commit
中登录而不是raising
。Rails会从任何被调用的after_commit
钩子中拯救出nil。 - gravitron