[英]ruby – Difference between after_create, after_save and after_commit in rails callbacks – Code Utility
[英]Difference between after_create, after_save and after_commit in rails callbacks
Rails 中after_create
、 after_save
和after_commit
的区别在于:
after_save
在创建和更新对象时调用after_commit
在创建、更新和销毁时被调用。after_create
仅在创建对象时调用这是它们之间唯一的区别,还是还有其他主要区别?
你几乎猜对了。 但是after_commit
和after_create
或after_save
之间有一个主要区别,即
在after_create
的情况下,这将始终在调用 save(或 create)返回之前。
Rails 将每次保存都包装在一个事务中,并且在该事务中运行 before/after create 回调(其结果是,如果在 after_create 中引发异常,则保存将回滚)。 使用after_commit
,您的代码直到最外层事务提交后才会运行。 这可能是创建的事务轨道或由您创建的轨道(例如,如果您想在单个事务中进行多项更改)。 最初发布在这里
这也意味着,如果after_commit
引发异常,则事务将不会回滚。
使用回调顺序
after_create -
在 Model.save 之后对尚未保存的新对象调用(不存在记录)
after_save -
在 Model.save 之后调用(无论是创建还是更新保存)
after_commit -
在数据库事务完成后调用。
此外,即使仅触及记录, after_commit 也会执行。 这可能不是您想要的。 after_save 将不会在触摸后运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.