Has*_*mad 41 ruby activerecord ruby-on-rails callback
之间的差异after_create,after_save以及after_commit在Rails的是:
after_save 在创建和更新对象时调用after_commit 在创建,更新和销毁时调用. after_create 仅在创建对象时调用这是它们之间的唯一区别还是存在其他主要差异?
Dus*_*sht 60
你几乎做对了.然而,有一个重要区别after_commit,并after_create或after_save即
在这种情况下after_create,这将始终在保存(或创建)返回的调用之前.
Rails将事务中的每个保存包装起来,并且在该事务内部运行之前/之后的创建回调(这样做的结果是,如果在after_create中引发异常,则将回滚保存).使用after_commit,直到最外层事务提交后,您的代码才会运行.这可以是创建的事务轨道或由您创建的事务轨道(例如,如果您想在单个事务中进行多处更改).最初发布在这里
这也意味着,如果after_commit引发异常,那么事务将不会回滚.
带回调顺序
after_create -
在尚未保存的新对象上进行Model.save之后调用(不存在任何记录)
after_save的 -
在Model.save之后调用(无论是创建还是更新保存)
after_commit -
数据库事务完成后调用。
| 归档时间: |
|
| 查看次数: |
17844 次 |
| 最近记录: |