2015-09-27 29 views
0

我想更新多行。一些行可能已經有一個值。因此,如果該行中的值爲2,我想用另外4個值更新它以使總數爲6,那麼如何在不查詢每行的當前值的情況下執行此操作?或者我必須這樣做?使用數學更新多行以添加到現有值

我目前有類似這樣的事情。

item_match = Item.where("id IN (?)", item_match_ids).to_a 
item_match.update_all(quantity: quantity) 

回答

1

我認爲你必須刪除to_a,留下這樣:

Item.where(id: [id1, id2, ...]).update_all(quantity: quantity) 

但是,如果你要的量添加到每個需要使用發現每一條記錄:

Item.where(id: [id1, id2, ...]).find_each do |item| 
    item.update(quantity: item.quantity + quantity) 
end 

你會發現更多的find_eachhere

2

如果插件g對所有記錄的值相同,則可以使用以下內容:

item_match.update_all("quantity = quantity + #{ quantity }") 

這比單獨更新記錄要快得多。爲了安全起見,您應該使quantity列非空並設置默認值。如果是用戶提供的,請務必對SQL的quantity值進行清理。

相關問題