在 where 子句中访问模型的嵌套哈希值的 Rails



我有一个Review模型,它包含一个字段answeranswer是一个简单的散列。编辑:answer作为jsonb存储在数据库中。

create_table "reviews", force: :cascade do |t|
t.jsonb "answer", default: {}
end

Review模型的字段如下:

id: 1,
venue_id: 1,
answer:
{
"loved_subject": "atmosphere",
"hated_subject": "service"
},
...

我想获取answer[:loved_subject]等于"atmosphere"的所有评论

到目前为止,我已经尝试了以下变体:

Review.where(answer: { loved_subject: "atmosphere" })

它不会出错,但只返回一个空数组。我100%知道确实存在loved_subject实际上是"atmosphere"的条目,所以很明显我的查询写得不正确。

我该如何写出这个查询?

由于answer是编辑中指定的jsonb,因此可以使用jsonb查询:

Review.where("answer->>'loved_subject' = ?", 'atmosphere')

最新更新