2012-02-29 15 views
0

...入れ子になったフォームアイテムで計算を実行するにはどうすればよいですか?

class Invoice < ActiveRecord::Base 
    has_many :items  
    accepts_nested_attributes_for :items 
    ... 
end 

class Item < ActiveRecord::Base 
    belongs_to :invoice 

    def self.total 
    price * quantity 
    end 
    ... 
end 

...と新しい請求書レコードとその関連アイテムを作成するネストされた(!)の形を私はRailsのにかなり新しいですし、私は、これらの二つのモデルを持っています。

しかし、私はこれらの項目について計算を実行することは非常に困難であることがわかります。例えば、各項目の横に、上記のtotalメソッドを使用してこの項目にtotalを入れたいとします。

残念ながら、動作しません。私のコントローラから派生し

<%= @invoice.items.amount %> 

:私のフォームでは、私はこれは、各項目の横に置く

def new  
    @invoice = Invoice.new 
    3.times {@invoice.items.build} 
end 

それはというエラーを投げ続けundefined local variable or method price

私はここで何をしないのです??

ありがとうございました。

答えて

1

Itemにクラスメソッドを作成しました。あなたが望むものがインスタンスメソッドであると思うと思います。

class Item < ActiveRecord::Base 
    belongs_to :invoice 

    def self.total 
    all.collect { |item| item.price * item.quantity } 
    end 
    ... 
end 

@invoice.items.total

:あなたはあなたのすべての項目の合計をすれば、あなたはこのような何かをする必要があると思い、個々の項目 @item.totalに呼び出したりすることができます

class Item < ActiveRecord::Base 
    belongs_to :invoice 

    def total 
    price * quantity 
    end 
    ... 
end 

希望に役立ちます。

+0

ありがとうございますが、私は2つのモデルに投稿するネストされたフォームで動作するようにはできません。あなたが言ったように私が定義したにもかかわらず、メソッドtotalがないことを私に伝え続けます。 – Tintin81

+0

合計を呼び出そうとしているオブジェクトを表示するようにOPを編集してください。 – TheDelChop

+0

OK、おそらく、問題をよく説明していないでしょう。私はちょうど私の質問[ここ]を再投稿しました(http://stackoverflow.com/questions/9505453/how-to-call-a-method-on-an-object-in-a-nested-form-in-rubyレール3)。 – Tintin81

関連する問題