有一个具有以下结构的 JSONB information
字段:
{
"ignore"=>false
}
我想获取ignore
字段为 true
的所有记录:
@user.posts.where("information ->> 'ignore' = TRUE")
此行引发错误:
PG::UndefinedFunction: ERROR: operator does not exist: text = boolean
我在谷歌上找不到任何东西。我们到处都在谈论文本意义。但是布尔值什么都没有。
您必须将information->>'ignore'
的结果转换为布尔值:
@user.posts.where("(information ->> 'ignore')::boolean = TRUE")
我在升级到 Rails 5/6 时遇到了同样的问题。似乎pg
宝石铸造的方式发生了一些变化,但这对我有用:
@user.posts.where("(information ->> 'ignore')::boolean = ?", true)
将参数作为第二个参数添加到where
方法调用时,ActiveRecord 将执行工作以适当地为你强制转换此参数。如果将.explain
添加到上面的查询中,则应看到类似以下内容:
EXPLAIN for: SELECT ... AND ((information ->> 'ignore')::boolean = TRUE) ...