Моя Фондовая модель имеет атрибуты quantity
и variant_id
.
Я добавляю новую акцию один раз в неделю для такого варианта:
stock_1 = id: 1, variant_id: 1, quantity: 1, created_at: Tue, 19 Feb 2019 15:19:00 UTC +00:00
stock_2 = id: 2, variant_id: 1, quantity: 3, created_at: Tue, 26 Feb 2019 15:19:20 UTC +00:00
stock_3 = id: 3, variant_id: 1, quantity: 10, created_at: Tue, 05 Mar 2019 15:19:39 UTC +00:00
Когда я продаю товар, я хочу удалить его из первого запаса, где количество превышает 0.
Я попробовал этот метод, который почти выполняет эту работу.
Проблема в том, что если я закажу 3 товара в одном и том же варианте: из запаса будет удалено 3 количества, поэтому запас будет отрицательным ...
Что бы вы предложили мне удалить остальныесо склада_2 ...
Есть ли способ улучшить идею?
@stock_1st = Stock.where(variant_id:1).where('quantity > 0').first
if @stock_1st.quantity == 0
@stock_2nd = Stock.where(variant_id: item.variant_id).where('quantity > 0').first
@stock_2nd.quantity -= item.quantity.to_i
@stock_2nd.save
else
@stock_1st.quantity -= item.quantity.to_i
@stock_1st.save
end
РЕДАКТИРОВАТЬ
спасибо Алексею Матюшкину за вашу драгоценную помощь, но у меня все еще есть проблемы
здесь метод:
def remove_from_stock
self.items.each do |item|
Stock.where(variant_id: item.variant_id).where('quantity > 0').order(:created_at).reduce(item.quantity.to_i) do |quantity, stock|
if leftover = item.quantity.to_i - stock.quantity <= 0
stock.update_attributes! quantity: stock.quantity - item.quantity.to_i
break
else
stock.update_attributes! quantity: 0
leftover
end
end
end
end
Сделал еще несколько тестов, и у меня действительно есть проблема: согласно моему примеру (который тоже выше).
Мой начальный запас на variant_id: 1
stock_1 = id: 1, variant_id: 1, quantity: 1, created_at: Tue, 19 Feb 2019 15:19:00 UTC +00:00
stock_2 = id: 2, variant_id: 1, quantity: 3, created_at: Tue, 26 Feb 2019 15:19:20 UTC +00:00
stock_3 = id: 3, variant_id: 1, quantity: 10, created_at: Tue, 05 Mar 2019 15:19:39 UTC +00:00
Если я закажу 5 статей в этом variant_id: 1
, мой оставшийся запас будет 0 везде ...
stock_1 = 0 #1/1 article is removed from this stock
stock_2 = 0 #3/3 articles are removed from this stock
stock_3 = 0 #Only 1/10 should be removed, but stock.update_attributes! set to quantity: 0
Как я могу это исправить, пожалуйста?