【问题标题】:Rails accessing a model's nested Hash value in a where clauseRails 在 where 子句中访问模型的嵌套哈希值
【发布时间】:2021-02-21 20:00:54
【问题描述】:

我有一个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" 的条目,所以很明显我的查询写错了。

我将如何写出这个查询?

【问题讨论】:

  • 答案是如何存储在数据库中的?
  • @BenStephens 答案以jsonb 形式存储在数据库中。 create_table "reviews", force: :cascade do |t| t.jsonb "answer", default: {}

标签: ruby-on-rails ruby postgresql activerecord


【解决方案1】:

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

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

【讨论】:

  • 必须使用双右箭头->>,但除此之外它工作得很好。谢谢!
  • 您将使用->> 而不是->,因为-> 返回一个jsonb 值,而->> 返回一个text 值。
猜你喜欢
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多