2016-10-05 15 views
1

私はPlayerモデルを持っていますが、Playerモデルには多くのPlayerStatsがあります。Rails:Order子モデルの統計の合計によるモデル?

私はプレイヤーの総ゴールを取得したい場合は、私が使用したい:

@player.player_stats.sum(:goals) 

どのように私は、コントローラの中で最も目標に選手のリストを取得するために、プレーヤーのモデルを使用することができますか?

私のようなものを考えていた:

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

を私はプレーヤーが直接ゴールを持っていないので、それは自分の目標が含まれている多くのPlayerStatsを持っていることはできません。

注:私はmySQLデータベースを使用しています。

答えて

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) 
+0

ワンダフル!ありがとうございました! – Fianite

+0

する!実際にはもう少しテストをしていましたが、それはハッシュのプレイヤーを繰り返すようです。のように、ほとんどのゴールと2番目に多くのゴールを持つ選手は、常に同じ選手の選手です。なぜそれが最初の2つの後に正常に動作しているので、それがなぜ起こっているのか分かりません。 – Fianite

+0

実際にそれはいつも最初の2つではなく、ちょうどそれをもう一度実行し、それを正しく注文するようではありません。現在6人のプレイヤーがいますが、limit(6)を使用すると、必ずしも6人のユニークプレイヤーが得られるわけではありません。 – Fianite

関連する問題