2个表:memberships
和week_scores
会员资格 has_many :week_scores
WeekScore belongs_to :membership
每个会员都有16个week_scores
每个week_score
表都有一个score
列,该列的范围是0到20。
因此,为了清楚起见,所有成员都有16周的得分,我想显示该组所有成员的leaderboard table
,按其全部16个week_scores
表的总得分排序。
它应该看起来像这样
用户名|得分
分数列应该是一个用户拥有的所有week_scores
的总和,因此在戴维的情况下
week_score.score 1: 15
week_score.score 2: 12
week_score.score 3: 14
...
week_score.score 16: 9
total: 114
如果帖子的名称不好,请告诉我。
答案 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提取到单独的变量中只是为了使代码更具可读性,当然也可以将其内联。)