2012-02-29 6 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, который является помощником формы(). Сообщение об ошибке дает подсказку.

Чтобы позвонить по этому вопросу, вам нужно заменить

<%= f.total %> 

с

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

Именно то, что я искал. Большое спасибо! Довольно сложно эти вложенные формы ... – Tintin81

Смежные вопросы