Rails的:异常的after_create停止保存(Rails: Exception in aft

2019-06-27 18:02发布

简单的问题。 我有,我想之后保存记录进行后处理的ActiveRecord的模型。 因此,在该模型我有坚持工作到我Resque队列queue_for_processing方法。 为了使这个执行后,我的记录是成功坚持我在我的模型编写如下:

after_create :queue_for_processing

很简单。 我原以为一切都按预期工作EXCEPT昨晚我Redis的服务器宕机,事情就出错。 我的期望是,该记录将仍然被保存,我可以稍后手动处理作业。 但queue_for_processing方法抛出异常(预期的行为),并从节约停止记录。

我误解了如何after_create作品? 或者是我的理解是否正确和时髦的事发生?

谢谢。

Answer 1:

是的,在回调事务都包裹起来。

基本上,以下原因会导致回滚:

  • 返回从假before_save或类似的回调
  • 例外before_save或类似的回调
  • 在例外after_save或类似的回调(after_create)

以下不会导致回滚:

  • 返回从假after_save或类似的回调
  • 例外after_commit

如果你不想异常引起回滚,使用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


文章来源: Rails: Exception in after_create stopping save