2015-11-02 17 views

回答

1

你可以簡單地包裹在一個事務中的整個循環:

@items = Item.all 

ActiveRecord::Base.transaction do 
    @items.each do |i| 
    i.name = somethingDynamic() 
    i.save!  
    end 
end 
0

您可以顯式啓動事務與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)")`