我想更新多行。一些行可能已經有一個值。因此,如果該行中的值爲2,我想用另外4個值更新它以使總數爲6,那麼如何在不查詢每行的當前值的情況下執行此操作?或者我必須這樣做?使用數學更新多行以添加到現有值
我目前有類似這樣的事情。
item_match = Item.where("id IN (?)", item_match_ids).to_a
item_match.update_all(quantity: quantity)
我想更新多行。一些行可能已經有一個值。因此,如果該行中的值爲2,我想用另外4個值更新它以使總數爲6,那麼如何在不查詢每行的當前值的情況下執行此操作?或者我必須這樣做?使用數學更新多行以添加到現有值
我目前有類似這樣的事情。
item_match = Item.where("id IN (?)", item_match_ids).to_a
item_match.update_all(quantity: quantity)
我認爲你必須刪除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_each
here
如果插件g對所有記錄的值相同,則可以使用以下內容:
item_match.update_all("quantity = quantity + #{ quantity }")
這比單獨更新記錄要快得多。爲了安全起見,您應該使quantity
列非空並設置默認值。如果是用戶提供的,請務必對SQL的quantity
值進行清理。