Ruby on rails 访问模型的Rails';s where子句中的嵌套哈希值

Ruby on rails 访问模型的Rails';s where子句中的嵌套哈希值,ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,我有一个Review模型,其中包含一个字段answer答案是一个简单的散列。编辑:answer作为jsonb存储在数据库中 create_table“reviews”,force::cascade do | t| t、 jsonb“应答”,默认值:{} 结束 Review模型的字段如下所示: id:1, 地点:1,, 答复: { “喜爱的主题”:“气氛”, “主题”:“服务” }, ... 我想抓取所有的评论,其中答案[:loved_subject]等于“atmosphere” 到目前为止,

我有一个
Review
模型,其中包含一个字段
answer
<代码>答案是一个简单的散列。编辑:
answer
作为
jsonb
存储在数据库中

create_table“reviews”,force::cascade do | t|
t、 jsonb“应答”,默认值:{}
结束
Review
模型的字段如下所示:

id:1,
地点:1,,
答复:
{
“喜爱的主题”:“气氛”,
“主题”:“服务”
},
...
我想抓取所有的评论,其中
答案[:loved_subject]
等于
“atmosphere”

到目前为止,我已经尝试了以下方面的变化:

Review.where(回答:{loved_subject:“atmosphere”})
它不会出错,但只返回一个空数组。我百分之百地知道,确实存在这样一个事实:
loved\u subject
确实是
“atmosphere”
,所以我的查询显然写得不正确


如何写出此查询?

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

Review.where(“答案->>“喜爱的主题”=?,“氛围”)

answer是如何存储在数据库中的?@BenStephens answers在数据库中存储为
jsonb
create_table“reviews”,force::cascade do | t | t.jsonb“answer”,默认值:{}
必须使用双右箭头
->
,但除此之外,它工作得非常好。谢谢您应该使用
->
而不是
->
,因为
->
返回一个
jsonb
值,而
->
返回一个
文本
值。