使用math更新多行以添加到现有值

时间:2015-09-27 22:18:45

标签: ruby-on-rails ruby-on-rails-3 activerecord

我正在尝试更新多行。某些行可能已有值。因此,如果该行中的值为2,并且我想用额外的4更新它以使总数为6.如果不查询每一行的当前值,我怎么能这样做呢?或者我必须这样做吗?

我目前有类似的东西。

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

2 个答案:

答案 0 :(得分:4)

如果为所有记录添加相同的值,则可以使用以下内容:

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

这比单独更新记录要快得多。为安全起见,您应将quantity列设为非空并设置默认值。如果是用户提供的,请务必清除SQL的quantity值。

答案 1 :(得分:1)

我认为你必须删除to_a,这样就离开了:

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

但是,如果你想为每条记录添加一个数量,你需要使用find each:

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

您会发现更多find_each here