我遇到一些麻烦搞清楚活动记录语法如下Postgres的查询:转换SQL语句的Active Record语法
SELECT *
FROM tracks
JOIN displays on displays.track_id = tracks.id
JOIN users on displays.user_id = users.id
WHERE user_id = 1
AND displays.display is true
AND tracks.likes_count > 200
上述作品上面的查询,现在我想将其转换ActiveRecord不同的语法,但得到的错误:
PG::SyntaxError: ERROR: syntax error at or near "'t'" LINE 1: ...ck_id" = "tracks"."id" WHERE (displays.display is 't', track...
Track.joins(:users, :displays).where('displays.display is ?, tracks.likes_count > ?, users.id = ?', true, 200, 1)
好像我做错了与displays.display is True
声明,但我已经试过无济于事一些变化。
我正在使用Activerecord-4.2.0。
我将不胜感激。
'是[not] true'且'not [not] false'被认为是后缀运算符(或者有些类似于特殊语法)。你不能参数化它们中的“true”/“false”部分。如果'display'列不能为'NULL',则可以使用'displays.display =?'。 – pozs 2015-02-09 16:28:31
我看到,你不能参数化一个布尔值....我怎么能参数化其他领域,仍然设置布尔值?我尝试了一些你建议的不同变体,但没有运气。 – theartofbeing 2015-02-09 16:40:13
不,你可以(一般情况下)传递一个布尔参数,但你的情况('是true')是特殊的。 – pozs 2015-02-09 16:44:10