使用其他表格总数对表格进行排序

时间:2018-08-14 22:48:01

标签: ruby-on-rails ruby sorting

2个表:membershipsweek_scores

会员资格 has_many :week_scores

WeekScore belongs_to :membership

每个会员都有16个week_scores

每个week_score表都有一个score列,该列的范围是0到20。

因此,为了清楚起见,所有成员都有16周的得分,我想显示该组所有成员的leaderboard table,按其全部16个week_scores表的总得分排序。

它应该看起来像这样

用户名|得分

  1. 大卫| 114
  2. 里克| 97
  3. 迈克| 95
  4. ...

分数列应该是一个用户拥有的所有week_scores的总和,因此在戴维的情况下

week_score.score 1: 15  
week_score.score 2: 12  
week_score.score 3: 14  
...  
week_score.score 16: 9  
total: 114  

如果帖子的名称不好,请告诉我。

1 个答案:

答案 0 :(得分:0)

一种方法是使用子选择:

subselect = "SELECT SUM(score) FROM week_scores WHERE membership_id=memberships.id"
@memberships = Membership.
  select("memberships.*, (#{subselect}) AS total_score").
  order("total_score DESC")

在选择子句(total_score中指定的附加列将在返回的成员资格实例上可用,就好像它是“真实”属性一样,因此调用类似@memberships.first.total_score的东西就可以了。

(请注意,我将subselect提取到单独的变量中只是为了使代码更具可读性,当然也可以将其内联。)