Задать вопрос
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 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 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
Вам нужно почитать про такую прекрасную вещь, как транзакции.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы