【发布时间】:2015-02-09 16:24:15
【问题描述】:
我在确定以下 Postgres 查询的 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: 在“'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。
我将不胜感激。
【问题讨论】:
-
is [not] true和is [not] false被认为是后缀运算符(或有点类似,具有特殊语法)。您不能参数化其中的true/false部分。如果display列不能为NULL,则可以使用displays.display = ?。 -
我明白了,你不能参数化布尔值....我怎样才能参数化其他字段并仍然设置布尔值?我尝试了您建议的几种不同的变体,但没有成功。
-
不,您可以(通常)传递一个布尔参数,但您的情况 (
is true) 很特殊。
标签: ruby postgresql activerecord