Как использовать обратный вызов after_update в рельсах? - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу использовать метод обратного вызова after_update для метода, который обновляет запас товара в приложении корзины.Код в контроллере выглядит следующим образом: ProductsController.rb:

  def update
     order = current_order
     @order_item = order.order_items.find(params[:id])
     @order_item.product.save
 end

И в ProudctModel:

 after_update :remove_stock
 def remove_stock
   puts "this is #{order_items}"
   order_items.collect do |oi|
       puts "this is product id: #{oi.product.id}"

   end
 end

Однако при запуске вышеописанного журнал выглядит следующим образом:

order items product: 1
order items product: 1
order items product: 1
order items product: 1
order items product: 1
order items product: 1
order items product: 1
order items product: 1
order items product: 1
order items product: 1
order items product: 1
order items product: 1

Почему отображается так много product_ids, когда в order_item присутствует только один продукт?

PS: Мои ассоциации таковы:

product has_many order_items

order_items принадлежит_to order

order has_many order_items

Что мне не хватает?Пожалуйста помоги.Заранее спасибо.

1 Ответ

0 голосов
/ 20 ноября 2018
 after_update :remove_stock
 def remove_stock
   puts "this is product id: #{self.id}"
 end

, так как вы находитесь в самой модели продукта, у вас есть доступ к объекту продукта

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