Rails:after_create停止保存时出现exception

简单的问题。 我有一个ActiveRecord模型,我希望在保存记录后执行后期处理。 所以在模型中我有一个queue_for_processing方法,可以将作业粘贴到我的Resque队列中。 为了在我的记录成功持久化后执行此操作,我在我的模型中编写了以下内容:

after_create :queue_for_processing 

很简单。 我原以为一切都按预期工作除了昨晚我的redis服务器发生故障,事情发生了变化。 我的期望是记录仍然会被保存,我可以稍后手动处理该作业。 但是queue_for_processing方法抛出exception(预期行为)并停止保存记录。

我误解了after_create是如何工作的吗? 或者我的理解是否正确并且发生了什么时髦?

谢谢。

是的,回调都包含在交易中。

基本上,以下将导致回滚:

  • before_save或类似的回调中返回false
  • before_saveexception或类似的回调
  • after_save或类似回调中的exception(after_create)

以下内容不会导致回滚:

  • after_save或类似的回调中返回false
  • after_commitexception

如果您不希望exception导致回滚,请使用after_commit

  • 参考: http : //webonrails.com/2012/08/28/activerecord-after_commit-hook/
  • 其他参考: http : //guides.rubyonrails.org/v3.1.3/active_record_validations_callbacks.html#transaction-callbacks