Ruby on Rails Взаимодействие через связанный прокси-сервер collection и обновление атрибута - PullRequest
0 голосов
/ 04 мая 2018

У меня есть две модели, связанные друг с другом.

Например, заказ содержит много позиций.

Если есть совпадение (т. Е. Уже есть позиция заказа с тем же номером заказа), я бы хотел увеличить количество позиций заказа. Это лучший способ сделать это в 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

но у меня возникли ошибки.

Спасибо

1 Ответ

0 голосов
/ 04 мая 2018

Вы можете сделать это, используя один запрос без выборки данных и итерирования по ним, как показано ниже:

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

Примечание:
update_all пропустить проверку и обратные вызовы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...