以下两者之间有什么区别吗

after_create :after_createafter_commit :after_commit_on_create, :on => :create

这些可以互换使用吗?

推荐答案

它们不能互换.关键的区别在于回调何时运行.在after_create的情况下,这总是在save(或create)的呼叫返回之前.

如果在Rails中运行的每个事务都是,则在该事务中创建一个异常后再运行.对于after_commit,您的代码在提交最外层的事务之后才会运行.这可以是创建的事务轨道,也可以是您创建的事务轨道(例如,如果您希望在单个事务中进行多个更改).

在运行after_save/create次时,您的保存仍然可以回滚,并且(默认情况下)对其他数据库连接(例如,sidekiq之类的后台任务)不可见.这二者的某种结合通常是使用after_commit的动机.

Ruby-on-rails相关问答推荐

错误正在被ViewComponent、Ruby on Rails中吞噬

Rails 7.1中的覆盖脚手架控制器

如何修改使用Google Cloud App Engine部署rails 7应用程序的步骤

使用FactoryBot测试ActiveStorage的RSpec请求规范

基于 2 列定义唯一主键

跳过模型中的某些验证方法

Rails:删除级联与依赖销毁

Rails:文件路径

更改 form_for rails 3.1 生成的 html 表单 ID

使用 jQuery 在 Rails 中不显眼的动态表单字段

在 ruby​​ on rails 上构建方法

如何让 ActiveAdmin 使用强参数?

错误未初始化的常量 AWS (NameError)

Rspec - Rails - 如何遵循重定向

rbenv:没有 gemsets 生存

如何更改 Rails 3 控制器中视图文件的默认路径?

从 Rails 中的 ActiveRecord::RecordNotFound 救援

按照给定 ID 数组的顺序按 ID 查找模型记录

Rails:如何将日期时间字符串解析为特定时区

没有路由匹配缺少必需的键:[:id]