简单的问题。 我有,我想之后保存记录进行后处理的ActiveRecord的模型。 因此,在该模型我有坚持工作到我Resque队列queue_for_processing方法。 为了使这个执行后,我的记录是成功坚持我在我的模型编写如下:
after_create :queue_for_processing
很简单。 我原以为一切都按预期工作EXCEPT昨晚我Redis的服务器宕机,事情就出错。 我的期望是,该记录将仍然被保存,我可以稍后手动处理作业。 但queue_for_processing方法抛出异常(预期的行为),并从节约停止记录。
我误解了如何after_create作品? 或者是我的理解是否正确和时髦的事发生?
谢谢。
是的,在回调事务都包裹起来。
基本上,以下原因会导致回滚:
- 返回从假
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