use*_*677 1 activerecord ruby-on-rails ruby-on-rails-5.2
据我了解,换.save!行将 ActiveRecord::Base.transaction确保所有模型(用户、配置文件和设置)保存在一起或根本不保存。
但是,我还被告知包括 .save!与所有模型。保存!方法也能做到这一点。所以本质上,版本 1 和 2 是相同的。我感觉我错了,那有什么区别呢?
谢谢
def save
if valid?
ActiveRecord::Base.transaction do
User.save!
Profile.save!
Setting.save!
end
else
false
end
end
Run Code Online (Sandbox Code Playgroud)
def save
if valid?
User.save!
Profile.save!
Setting.save!
else
false
end
end
Run Code Online (Sandbox Code Playgroud)
参考: https: //api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html
在第一种情况下如果有的话保存!语句失败则所有之前保存的模型将被回滚。例如:如果setting.save!失败,则setting.save!、user.save!和profile.save!将被回滚。
但在第二种情况下,如果有保存的话!语句失败,那么它只会回滚该语句,并且还会引发异常。例如:如果setting.save!失败则只会setting.save!回滚。
仅在第一个语句失败“user.save!”的情况下,这两个语句才会起作用。因为将引发异常,并且在第二种情况下,后续语句将不会被执行
save和之间的区别save!在于,后者会引发异常,但如果验证失败,两者都不会将对象的值保存到表中。
| 归档时间: |
|
| 查看次数: |
3199 次 |
| 最近记录: |