我有一个玩家模型,一个玩家模型有很多玩家状态。
如果我想得到一个球员的总目标,我会用:

@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)

07-28 02:08