簡體   English   中英

Ruby on Rails - 事務回滾不適用於多次保存

[英]Ruby on Rails - rollback on transactions doesnt work for multiple saves

我有這段簡單的代碼。

ActiveRecord::Base.transaction do
    User.new(username: "michael").save!
    User.new(username: "lebron").save!
    User.new(username: "michael").save! # not unique error
end

有趣的是,第 3 行中的錯誤不會回滾所有保存,而只會回滾最后一個。

我對 Ruby 中的 TX 有什么不了解,所以它的行為是這樣的?

從文檔中知道

#save 和#destroy 都包含在一個事務中

所以我假設它們被包裝到與父事務不同的事務中。

因此,從第 3 個語句回滾對前兩個語句無效。

應該如何解決,以便我在交易過程中回滾所有語句?

實際上,ActiveRecord::Base.transaction 將驗證單個交易,因此您可以將其轉換為單個交易,以便它正常工作。 因此,將用戶詳細信息推送到一個數組中並創建它。

示例: user_details = [{username: "michael"}, {username: "lebron"}, {username: "michael"}] User.create(user_details)

暫無
暫無

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

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