[英]ActiveRecord::Base.transaction with Rails .save
據我了解,包裝.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
def save
if valid?
User.save!
Profile.save!
Setting.save!
else
false
end
end
參考: 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!
之間的區別save!
是后者會引發異常,但是如果驗證失敗,兩者都不會將對象的值保存到表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.