RoR:如何使查询返回每个组的总和值?

时间:2014-06-05 20:28:41

标签: ruby-on-rails sum

一直在教自己如何构建一个简单的ruby / rails网站。现在尝试找出数据操作的警告。小组正在工作,我如何"总和"所有的栏目?

index.html.erb

<table>

<tr>
<th>Site</th>
<th><7days</th>
<th>>7days</th>
<th>>30days</th>
<th>>90days</th>
<th>>180days</th>
<th>>365days</th>

</tr>
<tr>

<% @gdcomets.each do |dcomet| %>

<td><%= dcomet.site %></td>
<td><%= @sum1 %></td>
<td><%= @sum2 %></td>
<td><%= @sum3 %></td>
<td><%= @sum4 %></td>
<td><%= @sum5 %></td>
<td><%= @sum6 %></td>

</tr>

<% end %>

</table>

dcomets_controller

class DcometsController < ApplicationController

# GET /dcomets
# GET /dcomets.json
def index

@dcomets = Dcomet.all

@gdcomets = Dcomet.group(:site)

@sum1 = @gdcomets.map(&:ls7day).sum
@sum2 = @gdcomets.map(&:gt7day).sum
@sum3 = @gdcomets.map(&:gt30day).sum
@sum4 = @gdcomets.map(&:gt90day).sum
@sum5 = @gdcomets.map(&:gt180day).sum
@sum6 = @gdcomets.map(&:gt365day).sum


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

2 个答案:

答案 0 :(得分:1)

@sum = @gdcomets.map(&:data).sum

:data是您想要求和的列的名称。

答案 1 :(得分:0)

你可以获得更好的性能,让SQL做驴工作总结一切:

Dcomet.group(:site).sum(:data)

其中:data是要汇总的列的名称。这将返回一个散列,其中键是站点值,值是该站点的相应总和