Rails 3 - как вызвать метод для вложенного объекта формы - PullRequest
0 голосов
/ 09 марта 2012

Вероятно, есть очевидный ответ на этот вопрос, но я не могу его найти, поэтому:

У меня есть timesheets модель, в которой много time_entries, добавленных через вложенную форму:

расписания edit.html.erb:

<%= form_for @timesheet do |f| %>
.
.
.
    <%= f.fields_for :time_entries do |builder| %>
            <%= render 'time_entry_fields', :f => builder %>
    <% end %>

time_entry_fields частично

<%= f.text_field :project %>
<%= f.text_field :day1_hours %>
<%= f.text_field :day2_hours %>
<%= f.text_field :day3_hours %>
<%= f.text_field :day4_hours %>
<%= f.text_field :day5_hours %>
<%= f.text_field :day6_hours %>
<%= f.text_field :day7_hours %>

Я бы хотел определить метод, который показывает сумму всех введенных часов - day1_hours + day2_hours + ... и т. Д. Я попытался поместить это в модель:

time_entry.rb

def total_hours
    d1 = day1_hours || 0
    d2 = day2_hours || 0
    d3 = day3_hours || 0
    d4 = day4_hours || 0
    d5 = day5_hours || 0
    d6 = day6_hours || 0
    d7 = day7_hours || 0
    d1 + d2 + d3 + d4 + d5 + d6 + d7
end   

И это прекрасно работает, если я вызываю его для объекта TimeEntry в консоли:

1.9.3p0 :003 > TimeEntry.find(3).total_hours
TimeEntry Load (0.3ms)  SELECT "time_entries".* FROM "time_entries" WHERE "time_entries"."id" = $1 LIMIT 1  [["id", 3]]
=> 8 

Но я не могу понять, как вызвать его из числа time_entry_fields в форме. Обычно я могу определить @time_entry в контроллере, чтобы я мог использовать @time_entry.total_hours, но как это сделать для объекта во вложенной форме?

1 Ответ

3 голосов
/ 09 марта 2012

f.object.total_hours в вашем частичном должно быть то, что вы хотите

...