Rails 在 where 子句中访问模型的嵌套哈希值
Rails accessing a model's nested Hash value in a where clause
我有一个 Review
模型,其中包含一个字段 answer
。 answer
是一个简单的散列。编辑: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')
我有一个 Review
模型,其中包含一个字段 answer
。 answer
是一个简单的散列。编辑: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')