我尝试在我的查询中使用Postgres匹配整数ID时收到此错误消息。
PG::InvalidTextRepresentation:ERROR: invalid input syntax for integer: "matches.team_id"
我已经建立了协会。
统计
belongs_to :player
has_many :matches, foreign_key: 'match_id', primary_key: 'match_id'
匹配
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的位置相同,那么每match_id
只生成1个目标
匹配数据库
|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 |
答案 0 :(得分:3)
改变这个:
where('stats.team_id = ?', 'matches.team_id')
到此:
where('stats.team_id = matches.team_id')
当您使用?
替换时,您说的是?
的数据应该被转义。它正在查看'matches.team_id'
的类型,看到它是一个字符串,并将其包装在引号中。
可能有一种方法可以在不需要自定义where
子句的情况下进行连接,但问题的根源是字符串转义机制。