Rails中after_create
、after_save
和after_commit
的区别在于:
-
after_save
在创建和更新对象时调用 - 创建、更新和销毁时调用
after_commit
. -
after_create
仅在创建对象时调用
这是它们之间唯一的区别,还是还有其他主要区别?
Rails中after_create
、after_save
和after_commit
的区别在于:
after_save
在创建和更新对象时调用after_commit
. after_create
仅在创建对象时调用这是它们之间唯一的区别,还是还有其他主要区别?
你差点说对了.然而,after_commit
和after_create
或after_save
之间有一个主要区别,即.
在after_create
的情况下,这将始终在save(或create)调用返回之前.
Rails将每个save包装在一个事务中,before/after create回调在该事务中运行(这样做的结果是,如果在after_create中引发异常,则save将回滚).对于after_commit
,您的代码在提交最外层的事务之后才会运行.这可以是创建的事务轨道,也可以是您创建的事务轨道(例如,如果您希望在单个事务中进行多个更改).最初发布了here条
也就是说,if 100 raises an exception, then the transaction won't be rolled back.