我有一个玩家模型,一个玩家模型有很多玩家状态。
如果我想得到一个球员的总目标,我会用:
@player.player_stats.sum(:goals)
如何使用玩家模型检索控制器中目标最多的玩家列表?
我在想:
@players = Player.order(:goals).limit(7)
但我不能这样做,因为一个球员没有直接的目标,它有许多球员的状态,其中包含他们的目标。
注意:我使用的是mysql数据库。
最佳答案
我认为应该采取以下措施:
Player
.joins(:player_stats)
.group('player_stats.id')
.order('SUM(player_stats.goals) DESC')
.limit(7)
您可以在您的案例中使用scope:
class Player
scope :by_goals, lambda {
joins(:player_stats).group('players.id').order('SUM(player_stats.goals) DESC')
}
end
在控制器中:
Player.by_goals.limit(7)