2016-10-09 3 views
0

Derzeit verwende ich die folgenden, um alle Spieler bekommen, gehen Sie in ihre Spieler_Stats Objekte, und summieren ihre Ziele.Rails: Beschränkung auf bestimmte Datensätze beim Beitritt

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

Wie kann ich es beschränken nicht alle player_stats Objekte zu verwenden, was ist, wenn ich die Ziele der player_stat Objekte nur summieren möchten, die eine bestimmte game_id haben?

HINWEIS: Ich verwende mySQL.

Antwort

1

Sie müssen nur in dem für die Abfrage hinzuzufügen:

Player.joins(:player_stats).group(:id).where("player_stats.game_id = ?", game_id).order("SUM(player_stats.goals) DESC") 
0

ein In where-Klausel für die Abfrage:

Player.joins(:player_stats) 
     # you can actually pass a model as well. 
     .where(player_stats: { game: game_id }) 
     .group('players.id') 
     .order('SUM(player_stats.goals) DESC') 

Wenn Sie einen Hash zu .where Schienen passieren, wo die Bedingungen für die erstellen Verband. Es ist eigentlich intelligent genug, um den Verein zu verwenden, so können Sie tun:

class Player 
    belongs_to :hometown 
end 

Player.joins(:hometown) 
     .where(hometown: { name: 'Brooklyn' }) 

und Schienen werden WHERE hometowns.name = 'Brooklyn' statt hometown.name abfragen.

Aus diesem Grund ist es in der Regel vorzuziehen über die Verwendung von String-Bedingungen.

Verwandte Themen