Rails中的after_create、after_save和after_commit的区别在于:
after_save。after_commit在创建、更新和销毁时被调用。after_create。这是唯一的不同之处,还是有其他重大差异?
发布于 2015-11-24 10:05:01
你差点就猜对了。然而,after_commit和after_create或after_save有一个很大的区别。
对于after_create,这总是在调用保存(或创建)返回之前。
Rails封装事务中的每个保存,在事务中运行之前/之后的创建回调(结果是,如果在after_create中引发异常,则保存将被回滚)。使用after_commit,直到提交了最外层的事务之后,您的代码才会运行。这可以是您创建的事务rails,也可以是您创建的事务rails(例如,如果您希望在单个事务中进行多个更改)。最初发布的here
这也意味着,如果after_commit 引发异常,则事务不会回滚.。
来自M-Dahab的评论:after_commit会在创建、更新和销毁之后运行.但是,您可以使用on:选项指定您感兴趣的内容。after_commit :some_method, on: :create,甚至after_commit :some_method, on: [:create, :destroy],或者使用像after_commit(on: :update) do run_method() end这样的块。
发布于 2019-03-18 11:53:20
有回调的顺序
after_create -
在Model.save之后调用尚未保存的新对象(不存在记录)。
after_save -
在Model.save之后调用(不管是创建保存还是更新保存)
after_commit -
在数据库事务完成后调用。
发布于 2021-07-29 19:56:45
而且,即使只触及记录,after_commit也会执行。这可能不是你想要的。after_save不会在触摸后运行。
https://stackoverflow.com/questions/33890458
复制相似问题