2016-10-05 27 views
1

我有一個Player模型,一個Player模型有很多PlayerStats。Rails:通過子模型中的統計信息總和來排序模型?

如果我想獲得一個球員的總進球數,我會使用:

@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

會做!實際上我只是在做更多的測試,看起來好像是在重複玩家。如其中,進球數最多,進球次數最多的球員始終是相同的球員實例。不知道爲什麼這樣做,因爲在前兩個它正常工作。 – Fianite

+0

事實上,它並不總是前兩個,只是再次運行它,似乎並沒有正確排序。目前有6名選手,而當我使用限制(6)時並不總是獲得6名獨特選手。 – Fianite