Вероятно, есть очевидный ответ на этот вопрос, но я не могу его найти, поэтому:
У меня есть 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
, но как это сделать для объекта во вложенной форме?