Rails:按子模型中的统计总和排序模型?

Rails: Order Model by sum of stats in child model?

我有一个Player模型,一个Player模型有很多PlayerStats。

如果我想获得玩家的总进球数,我会使用:

@player.player_stats.sum(:goals)

如何使用 Player 模型检索控制器中进球最多的球员列表?

我在想:

@players = Player.order(:goals).limit(7)

但我不能那样做,因为玩家没有直接的目标,它有许多包含他们目标的 PlayerStats。

注意:我使用的是 mySQL 数据库。

我认为应该做到以下几点:

Player
  .joins(:player_stats)
  .group('player_stats.id')
  .order('SUM(player_stats.goals) DESC')
  .limit(7)

您可以在您的案例中使用范围:

class Player
  scope :by_goals, lambda {
    joins(:player_stats).group('players.id').order('SUM(player_stats.goals) DESC')
  }
end

在控制器中:

Player.by_goals.limit(7)