Ruby on Rails - расчет before_save для accept_nested_attributes_for

У меня есть модель счета-фактуры, в которой "много" элементов счета-фактуры. У меня есть форма, которая позволяет вам создавать / редактировать счет, и эта форма принимает вложенные атрибуты для элементов счета.

В моей модели счета есть поле "total_amount", которое является вычисляемым полем (сумма " сумма »из элементов счета-фактуры).

Я хочу рассчитать эту сумму при создании или обновлении счета-фактуры. Я пытаюсь сделать это в событии before_save моей модели счета. Приведенный ниже код почти работает, однако общая сумма, которая сохраняется, всегда на шаг отстает. Т.е. если у меня есть счет на общую сумму 20 долларов, и я редактирую этот счет и изменяю элементы счета на общую сумму 15 долларов, а затем сохраняю свой счет, общая сумма не меняется. Если я открою тот же счет, а затем сохраню его снова, итоговая сумма будет обновлена ​​правильно.

Я предполагаю, что моя строка ниже, которая вычисляет сумму, обращается к элементам строк, которые уже сохранены в базе данных, а не к тем, которые были только что изменены и собираются сохранить. Однако я не знаю, как получить к ним доступ.

class Invoice < ActiveRecord::Base
  has_many :invoice_items, :dependent => :destroy

  accepts_nested_attributes_for :invoice_items, :allow_destroy => true 

  before_save :record_total_amount

  private
    def record_total_amount
      self.total_amount = self.invoice_items.sum('amount')
    end
end

Любая помощь будет принята с благодарностью.

7
задан Joel Friedlaender 28 February 2011 в 06:31
поделиться