2016-11-16 2 views
0

Я получаю это сообщение об ошибке при попытке сопоставить целые ID в моем запросе us Postgres.Недопустимый синтаксис для целого числа

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

У меня есть ассоциации на месте.

Stat

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

Match

has_many :stats 
has_many :players, through: :stats 

Статистика Контроллер

@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') 

Мои Спички база данных имеет два match_id строк, которые являются одинаковыми, и когда я суммирую цели игроков, он находит цели игроков, но при отображении отображается goals. Так что я решил, что если мой запрос указано, что только найти, где team_id являются одинаковыми, то было бы генерировать только 1 гол за match_id

Матчи DB

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

Статистика дб

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

ответ

3

Измените это:

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

к этому:

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

При использовании замены ?, вы говорите, что данные для ? должны быть экранированы. Он смотрит на тип 'matches.team_id', видит, что это строка и обертывает ее в кавычки.

Может быть способ сделать это соединение без необходимости использования специального предложения where, но корень вашей проблемы - это механизм escape-последовательности.

+0

Perfect. Гвоздь, большое спасибо Джим – DollarChills

Смежные вопросы