Ruby on Rails 通过关联的集合代理和更新属性进行交互



我有两个模型相互关联。

例如,一个订单包含许多订单项目。

如果存在匹配项(即:已经是具有相同 SKU 的订单项(,我想增加订单项数量。这是在 Ruby 中执行此操作的最佳方式吗?

switch = false
order.order_items.each do |item|
if item.sku == test.sku
item.increment!(:quantity)
switch = true
end 
end

我最初试图做这样的事情:

if order.order_items.where(sku: test.sku).length > 0
order_item = order.order_items.where("sku = ?", test.sku).take
order_item.increment!(:quantity)
end

但我最终遇到了一些错误。

谢谢

您可以使用一个查询来执行此操作,而无需获取数据并循环访问它,如下所示:

order.order_items.where(sku: test.sku).update_all("quantity = quantity + 1")

注意:
update_all跳过验证和回调

最新更新