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

时间:2016-10-05 15:41:55

标签: mysql ruby-on-rails database associations

我有一个播放器模型,播放器模型有很多PlayerStats。

如果我想获得玩家的总目标,我会使用:

$scope.Approved = $filter('filter')(
    $scope.Summary.CorpEmployees, 
    { locationId: item.Label, evaluationStatusId: '3' }, 
    true // <--- This is the parameter that forces strict equality
);

如何使用播放器模型检索控制器中目标最多的玩家列表?

我在想这样的事情:

@player.player_stats.sum(:goals)

但是我无法做到这一点,因为玩家并没有直接进球,而是有很多玩家目标包含他们的目标。

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

1 个答案:

答案 0 :(得分:1)

我认为以下内容应该这样做:

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)