我有一个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" })
它不会出错,但只返回一个空数组。我100%知道确实存在loved_subject
实际上是"atmosphere"
的条目,所以很明显我的查询写得不正确。
我该如何写出这个查询?
由于answer
是编辑中指定的jsonb
,因此可以使用jsonb查询:
Review.where("answer->>'loved_subject' = ?", 'atmosphere')