2017-03-16 14 views
0

私は必要な情報を引き出すこのコードを作成しました。私は今WIDGET_IDへのキーと一致し、値を返す必要がRails:グループ別に集計

{188=>5, 160=>2} 

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

それはハッシュを返します。すなわち:

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

でオリジナリティの合計を取得することができますが、それを考え出しました。

コントローラ

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

追加のボーナスは、他の列も簡単に合計できることです。

0

あなたは@originalitysum[vote.widget.id]

関連する問題