Rails:逐个列汇总

时间:2017-03-16 00:53:49

标签: ruby-on-rails ruby

我创建了这段代码来提取我需要的信息。

def index
  @votes = Vote.all
  @originalitysum = Vote.group(:widget_id).sum(:originality)
end

它返回一个哈希:

{188=>5, 160=>2}

我现在需要将密钥与widget_id匹配并返回值。即:

如果widget_id为188则返回5.

<% @votes.group(:widget_id).each do |vote| %>
  <tr>
    <td><%= vote.widget.name %></td>
    <td><%= vote.widget.store %></td>
    <td><%=  %></td> <!-- This needs to be the total Originality -->
    <td><%= vote.interest %></td>
    <td><%= vote.rating %></td>
  </tr>
<% end %>

如果其他方式更有意义,我愿意改变它。

2 个答案:

答案 0 :(得分:0)

您可以使用@originalitysum[vote.widget.id]

获取原创性总和

答案 1 :(得分:0)

想出来。

控制器

def index
@votes = Vote.all
@originalitysum = Vote.select([:widget_id, :originality]).group('widget_id').sum(:originality)
@votecount =  Vote.group(:widget_id).count(:originality)
@votes = Vote.select(:widget_id, 
  "SUM(originality) as originality_sum", 
  "SUM(interest) as interest_sum", 
  "SUM(rating) as rating_sum").group(:widget_id).order("rating_sum DESC")
end

视图

<% @votes.group(:burger_id).each do |vote| %>
  <tr>
    <td><%= vote.widget.name %></td>
    <td><%= vote.widget.store %></td>
    <td><%= vote.originality_sum %></td>
    <td><%= vote.interest_sum %></td>
    <td><%= vote.rating_sum %></td>
  </tr>
<% end %>

感谢此链接中的这个答案,我能够一起解析它。 Group by a column and then get the sum of another column in Rails

额外的好处是它允许我轻松地将其他列相加。