通过子属性值的总和来订购模型

时间:2015-06-03 12:25:19

标签: ruby-on-rails ruby activerecord

我有团队,团队有多个会员资格。每个会员都有积分。我想通过这些会员积分的总和来订购团队。

示例:

团队很棒| 10分

团队好| 8分

由于:

团队精彩

  • 会员1,积分:5
  • 会员2,积分:5

团队合作:

  • 会员1,积分:5
  • 会员2,积分:3

但我似乎无法找到解决方案。

2 个答案:

答案 0 :(得分:0)

我没有足够的声誉来评论。所以我在这里指明我的观点。这个团队数据及其成员数据在同一个表或一个表中的团队数据和另一个表中的成员资格数据。您使用的是哪个数据库。如果是MySQL或Oracle,您可以使用聚合函数和CASE语句,然后按顺序来解决此问题。

您可以使用这样的查询(如果您使用的是MySQl数据库)

SELECT t.team_id,t.team_name,sum(t1.points) as sum_of_points,
 case  
 when sum(t1.points)=10 then "Awsome"
 when sum(t1.points)=8  then "good"
 else "default"
 end as credit 
from team t join team_membership t1 on(t.team_id=t1.team_id) 
group by t1.team_id order by sum_of_points desc

答案 1 :(得分:0)

在team.rb

has_many :memberships

def total_points
  self.memberships.sum(:points)
end

在控制器

@teams = Team.all.sort_by {|team| team.total_points }.reverse

在视图中(示例)

<% @teams.each do |team| %>
  <tr>
    <td><%= team.total_points %></td>
    <% if team.total_points >= 10 %>
     <td><%= "awesome" %></td>
    <% else %>
     <td><%= "good" %></td>
    <% end %>
  </tr>
<% end %>