Как вызвать ассоциацию обратного вызова в моделях рельсов - PullRequest
0 голосов
/ 30 июня 2019

Как отслеживать в моделях эту команду

=> order = Order.create
=> order.items << Item.first // this command

если у меня есть такие модели:

class Order < ApplicationRecord
   has_many :order_items
   has_many :items, through: :order_items
end
class Item < ApplicationRecord
   has_many :order_items
   has_many :orders, through: :order_items
end
class OrderItem < ApplicationRecord
   belongs_to :order
   belongs_to :item
end

Я пытаюсь использовать after_add, например, но у меня ничего не получилось.Например, моя задача: В методе контроллера (OrderController) создайте:

def create
 @order = Order.create(order_params)
 @order.items << Item.find(params[:id])
end

И у меня есть эти модели Order или Item, отслеживающие это (когда я добавляю элемент в заказ), и выводите мне сообщение в консоли (дляпример)

1 Ответ

3 голосов
/ 30 июня 2019

Посмотрите Руководства Rails о Обратных связях ассоциации . Существует, например, обратный вызов after_add.

# in your Order model
has_many :items, after_add: :track_item_added

private

def track_item_added(item)
  # your tracking code, for example
  Rails.logger.debug("Item ##{item.id} added to order ##{id}")
end
...