当您执行 activeRecord.save 时,事务是提交还是方法退出时?

equ*_*nt8 5 ruby ruby-on-rails

在 Rails 3 中,当您执行 activeRecord.save 时是事务提交还是方法退出时?

所以我想弄清楚的是 MySQL 是否是在保存后立即编写的!或者在我退出定义黑色后保存

def something
  1000.times do
       o = Order.new(:name => "Tomas")
       o.save
  end
end 
Run Code Online (Sandbox Code Playgroud)

Bre*_*der 5

您可能应该阅读一些关于ActiveRecord 对象回调链的内容;它解释了你的对象在引擎盖下发生了什么。

基本上,当您调用 save 时,ActiveRecord::Base 对象将按照文档列出的顺序遍历所有回调,您可以看到提交发生的位置(在我撰写本文时的第 6 步和第 7 步之间)。ActiveRecord 甚至会在提交发生后公开回调,以防您在确定某些内容已提交到数据库时需要一些条件逻辑,但通常我们相信如果save返回 true,则一切正常。

因此,为了明确回答您的问题,提交发生您的保存调用期间,而不是您退出方法时。

  • 对 OP:为了安全起见,您可以使用 `save!` 来引发验证错误,而不仅仅是让 `save` 返回一个布尔值。 (2认同)