rails:通过子模型中的stats之和来排序模型?

8fsztsew  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(194)

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

@player.player_stats.sum(:goals)

如何使用玩家模型检索控制器中目标最多的玩家列表?
我在想:

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

但我不能这么做,因为一个球员没有直接的进球,他有很多球员状态,其中包含他们的进球。
注意:我使用的是mysql数据库。

hrysbysz

hrysbysz1#

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

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)

相关问题