zoonman
@zoonman
⋆⋆⋆⋆⋆

Как делать вычисления в модели?

Есть модель заказы, у нее подчиненная модель позиции заказов.

class Order < ActiveRecord::Base
  has_many :order_items, :dependent => :destroy
  accepts_nested_attributes_for :order_items, :reject_if => lambda { |a| a[:inventory_id].blank? }, :allow_destroy => true
end

class OrderItem < ActiveRecord::Base
  belongs_to :order
  belongs_to :inventory
  # в схеме есть свойство quantity - количество товара в строке заказа 
end


Есть модель Товар на складах.

class Inventory < ActiveRecord::Base
  belongs_to :product
  belongs_to :stock
  # в схеме есть свойство amount - количество товара 
end


Не понимаю, как сделать отнимание товара из Inventory при заказе, изменение при добавлении, модификации количества товара в заказе.
  • Вопрос задан
  • 2265 просмотров
Пригласить эксперта
Ответы на вопрос 2
@vsuhachev
inventory.update!(amount: inventory.amount - order_item.quantity)


Более конкретное решение зависит от вашего процесса резервирования товара. Один из вариантов решения - создать отдельный класс, описывающий процесс резервирования
class OrderCheckoutService
  
  attr_accessor :order

  def initialize(order)
    @order = order
  end

  def checkout
    ActiveRecord::Base.transaction do
     # ваш код который переберет все позиции заказа, зарезервирует, сохранит, пошлет уведомления и т.п.
   end
  end

end
Ответ написан
Freika
@Freika
Senior Ruby on Rails developer
Вам нужно почитать про такую прекрасную вещь, как транзакции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы