「多くの」請求書アイテムがある請求書モデルがあります。請求書を作成/編集できるフォームがあります。このフォームは、請求書アイテムのネストされた属性を受け入れます。
私の請求書モデルには、計算フィールド(請求書アイテムの「金額」の合計)である「total_amount」フィールドがあります。
請求書の作成時または更新時にこの金額を計算したいのですが。請求書モデルのbefore_saveイベントでこれを実行しようとしています。以下のコードはほぼ機能しますが、保存される合計は常に1ステップ遅れています。つまり、合計$ 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
どんな助けでも大歓迎です。