2016-11-16 3 views
0

Ich erhalte diese Fehlermeldung beim Versuch, Integer-IDs in meiner Abfrage uns Postgres zusammenzuführen.Ungültige Syntax für Ganzzahl

PG::InvalidTextRepresentation:ERROR: invalid input syntax for integer: "matches.team_id" 

Ich habe Verbände an Ort und Stelle.

Stat

belongs_to :player 
has_many :matches, foreign_key: 'match_id', primary_key: 'match_id' 

Spiel

has_many :stats 
has_many :players, through: :stats 

Statistik-Controller

@player = Player.find(params[:id])  
@stats = Stat.where("player_id = ?", @player.id).joins(:matches) 
.where('stats.team_id = ?', 'matches.team_id').select('SUM(stats.goals) AS goals') 

Meine Spiele Datenbank hat zwei match_id Reihen, die die gleichen sind und wenn ich die Spielerziele summiere, findet es die Spielerziele, aber verdoppelt die goals beim Anzeigen. Also dachte ich, wenn meine Frage, dass nur angegeben, wo team_id die gleich sind, dann wäre es nur ein Ziel erzeugen pro match_id

Spiele db

|id|match_id|team_id|total_score| 
|10| 3433 | 1 |  3  | 
|11| 3433 | 2 |  2  | 

Stats db

|id|match_id|team_id|player_id|goals| 
|12| 3433 | 1 | 333 | 1 | 

Antwort

3

Ändern Sie diese:

where('stats.team_id = ?', 'matches.team_id') 

dazu:

where('stats.team_id = matches.team_id') 

Wenn Sie Substitution verwenden mit ?, Sie sagen, dass die Daten für ? entkommen werden sollte. Es schaut auf den Typ von 'matches.team_id', sieht, dass es eine Zeichenkette ist, und wickelt sie in Anführungszeichen ein.

Möglicherweise gibt es eine Möglichkeit, diese Verknüpfung ohne eine benutzerdefinierte where -Klausel zu tun, aber die Wurzel Ihres Problems ist die Zeichenfolge Escape-Mechanismus.

+0

Perfekt. Nailed it, vielen Dank Jim – DollarChills