簡體   English   中英

ActiveRecord :: Base.transaction與Rails .save

[英]ActiveRecord::Base.transaction with Rails .save

據我了解,包裝.save! ActiveRecord::Base.transaction將確保所有模型(用戶,配置文件和設置)一起保存或完全不保存。

但是,我還被告知包括.save! 與所有模型。保存! 方法也可以做到這一點。 因此,基本上,版本1和版本2是相同的。 我有一種錯的感覺,那有什么區別?

謝謝

版本1

def save
  if valid?
    ActiveRecord::Base.transaction do
      User.save!
      Profile.save!
      Setting.save!
    end
  else
    false
  end
end

版本2

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!”時,這兩種語句僅在一種情況下才能工作。 因為將引發異常,在第二種情況下將不執行后續語句

savesave!之間的區別save! 是后者會引發異常,但是如果驗證失敗,兩者都不會將對象的值保存到表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM