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

Rails accessing a model's nested Hash value in a where clause

我有一个 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" })

它不会出错,但它只是returns一个空数组。我 100% 知道确实存在 loved_subject 确实是 "atmosphere" 的条目,所以显然我的查询写错了。

我将如何写出这个查询?

由于 answer 是编辑中指定的 jsonb,您可以使用 jsonb queries:

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