PG::未定义函数:错误:运算符不存在:文本 = 布尔值



有一个具有以下结构的 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) ...

相关内容

  • 没有找到相关文章

最新更新