2

invoice多くの新しい を作成するためのフォームがありitemsます。

class Invoice < ActiveRecord::Base
  attr_accessible :project_id, :number, :date, :recipient, :items_attributes
  accepts_nested_attributes_for :items
end

newinvoiceと含むのセットをインスタンス化するとき、それらが保存される前であっても、それらが属するについて何かを知っitemsてもらいたいので、モデルで次のようなことを行うことができます:itemsinvoiceItem

class Item < ActiveRecord::Base
  belongs_to :invoice
  after_initialize :set_hourly_rate

  private 

    def set_hourly_rate
      if new_record?
        self.price ||= invoice.project.hourly_rate
      end
    end   

end

現在、インスタンス化中に子 ( item) が親 ( ) について何も知らないため、私のコードは失敗します。(したがって、ネストされた)をinvoice保存した後でのみ、すべてがうまくいきます。しかし、保存する前であっても、新しいアイテムごとにデフォルト値を設定したいと考えています。invoiceitems

これはどのように行うことができますか?

助けてくれてありがとう。

4

2 に答える 2

1

次のように、請求書の関連付けにコールバックを追加できます。

class Invoice < ActiveRecord::Base
  # Code
  belongs_to :project
  has_many :items, :after_add => :set_item_price

  private

  def set_item_price(item)
    item.price = project.hourly_rate
  end  

end
于 2012-10-29T15:08:59.713 に答える
0

invoiceオブジェクトを取得したら、このメソッドを介して作成されたメソッド ( docs here ) を使用して子レコードを.items.build作成できます 。 .)itemsinvoice

于 2012-10-29T15:07:32.273 に答える