2012-02-29 98 views
2

我有這兩款車型如何在Ruby on Rails 3中以嵌套形式調用對象的方法?

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

class Item < ActiveRecord::Base 
    belongs_to :invoice 

    def total 
    price * quantity 
    end 
    ... 
end 

這種嵌套形式的職位,以兩個模型(!):

<h1>Add an Invoice</h1> 
<%= form_for @invoice do |f| %> 
<p> 
    <%= f.label :recipient %> 
    <%= f.text_field :recipient %> </p> 
<p> 
    <%= f.label :date %> 
    <%= f.text_area :date %> 
</p> 
<h2>Items</h2> 
<p> 
    <%= f.fields_for(:items) do |f| %> 
    <%= f.label :description %> 
    <%= f.text_field :description %> 
    <%= f.label :price %> 
    <%= f.text_field :price %> 
    <%= f.label :quantity %> 
    <%= f.text_field :quantity %> 
    <%= f.label :total %> 
    <%= f.total %><!-- this method call is not working! --> 
    <% end %> 
</p> 
<%= f.submit %> 
<% end %> 

我該怎麼辦計算表單內我的項目?

在我Items模型我有這樣的方法:

def total 
    price * quantity 
end 

然而,在形式,我不能讓它使用f.total工作。我一直得到這個錯誤:

undefined method `total' for #<ActionView::Helpers::FormBuilder:0x10ec05558> 

我在這裏錯過了什麼?

回答

2

您正在調用的方法不在您的模型對象上,而是在f上,這是一個窗體幫助器(ActionView::Helpers::FormBuilder)。錯誤消息提供了一個提示。

要調用的項目,你需要

<%= f.object.total %> 
+0

更換

<%= f.total %> 

正是我一直在尋找。非常感謝!非常棘手的這些嵌套形式... – Tintin81 2012-02-29 21:04:27