以下两者之间有什么区别吗
after_create :after_create
和after_commit :after_commit_on_create, :on => :create
这些可以互换使用吗?
以下两者之间有什么区别吗
after_create :after_create
和after_commit :after_commit_on_create, :on => :create
这些可以互换使用吗?
它们不能互换.关键的区别在于回调何时运行.在after_create
的情况下,这总是在save
(或create
)的呼叫返回之前.
如果在Rails中运行的每个事务都是,则在该事务中创建一个异常后再运行.对于after_commit
,您的代码在提交最外层的事务之后才会运行.这可以是创建的事务轨道,也可以是您创建的事务轨道(例如,如果您希望在单个事务中进行多个更改).
在运行after_save/create
次时,您的保存仍然可以回滚,并且(默认情况下)对其他数据库连接(例如,sidekiq之类的后台任务)不可见.这二者的某种结合通常是使用after_commit
的动机.