соблюдать активные записи отношений - PullRequest
1 голос
/ 19 февраля 2010

Мне нравится наблюдать за добавлением объекта в мое отношение has_many без сохранения его в базе данных.
Поэтому, когда я добавляю LineItem к своему заказу, мне нравится вызывать Order :: calc_total, чтобы обновить фактическую общую стоимость.

o = Order.new<br> o.line_items << LineItem.new # should call calculate_total from order-object

но нет никаких наблюдателей для метода сборки моего LineItem.

Ответы [ 2 ]

4 голосов
/ 19 февраля 2010

Я отрекаюсь. Я только что узнал об обратных вызовах ассоциации: ActiveRecord :: Associtions :: ClassMethods , поиск по "обратным вызовам ассоциации". По существу:

class Order < ActiveRecord::Base
  has_many :line_items, :after_add => :calculate_order_total
end

У вас также есть доступ к before_add, before_remove и after_remove.

0 голосов
/ 19 февраля 2010

Сделайте это по-другому:

class Order < ActiveRecord::Base
  def add_line_item(line_item)
    self.line_items << line_item
    self.calculate_total
  end
end

Но я спрашиваю, почему вам нужно рассчитывать общее количество для каждого добавления позиции. То же самое может быть достигнуто, если вы вычисляете только один раз после добавления всех позиций.

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