在單個事務中更新整個ActiveRecord對象數組的首選方式是什麼?假設循環中有很多處理。突變ActiveRecord對象的數組和更新單事務?
@items = Item.all
@items.each do |i|
i.name = somethingDynamic()
end
#Commit @items to DB in single transaction
在單個事務中更新整個ActiveRecord對象數組的首選方式是什麼?假設循環中有很多處理。突變ActiveRecord對象的數組和更新單事務?
@items = Item.all
@items.each do |i|
i.name = somethingDynamic()
end
#Commit @items to DB in single transaction
你可以簡單地包裹在一個事務中的整個循環:
@items = Item.all
ActiveRecord::Base.transaction do
@items.each do |i|
i.name = somethingDynamic()
i.save!
end
end
您可以顯式啓動事務與ActiveRecord::Base.transaction
這樣的:
Item.transaction do
@items.each do |i|
i.name = something_dynamic()
i.save!
end
end
這將運行一堆UPDATE items set name = x
一個事務中的語句,並在第一次失敗時將事務回滾(因爲save!將拋出異常)。
如果你想要做的事,不需要一堆更新語句,你可以做一個UPDATE語句與原始的SQL是這樣的:
`@items.update_all("name = sql_func(name)")`