我创建了这段代码来提取我需要的信息。
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 %>
如果其他方式更有意义,我愿意改变它。
答案 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
额外的好处是它允许我轻松地将其他列相加。