2013-06-03 2 views
0

Я группировка записей пробег в месяц в моей Rails 3.2 приложения:Получите сумму атрибутов записи при группировке в Rails?

mileages_controller.rb

def index 
    @mileages = Mileage.find_all_by_user_id(current_user.id) 
    @mileages_months = Mileage.find_all_by_user_id(current_user.id).group_by { |t| t.created_at.beginning_of_month } 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @mileages } 
    end 
    end 

index.html.erb

<% @mileages_months.sort.each do |month, mileages| %> 
    <h4><%= month.strftime('%B %Y') %></h4> 
    <p>Total miles <strong><%= mileages.miles.sum %></strong>.</p> 
    <table> 
    <tr> 
     <th>Name</th> 
     <th>Miles</th> 
     <th>Start</th> 
     <th>Destination</th> 
     <th></th> 
    </tr> 
     <% for mileage in mileages %> 
     <tr> 
      <td><%= mileage.name %></td> 
      <td><%= mileage.miles %></td> 
      <td><%= mileage.start %></td> 
      <td><%= mileage.end %></td> 
      <td><%= link_to 'Show', mileage %></td> 
     </tr> 
     <% end %> 
</table> 
<% end %> 

Как вы можете видеть, Я пытаюсь суммировать общие мили за каждый месяц, используя <%= mileages.miles.sum %>. Это не сработает - но <%= mileages.first.miles %> правильно показывает мили первой записи за каждый месяц.

Каков правильный способ суммирования столбцов миль за каждый месяц?

+0

Какова ваша модель пробега, т.е. атрибуты? – Richlewis

+0

@total_mileage = @ mileages_months.sum (: miles) это предположение, но обратите внимание, как передать нужный вам атрибут. – Richlewis

+0

@ Richlewis состоит из «миль», «даты», «начала», «конца» и «имени» , – dannymcc

ответ

1

Ну вы можете создать вспомогательный метод (чтобы сохранить эту логику отдельно от точки зрения) в mileage_helper как:

def sum_mileges(mileages) 
    mileages.map(&:miles).sum 
end 

и затем вызвать его в представлении, как

<p>Total miles <strong><%= sum_mileges(mileages) %></strong>.</p> 

ИЛИ

вы можете сделать это непосредственно как:

<p>Total miles <strong><%= mileages.map(&:miles).sum %></strong>.</p> 
Смежные вопросы