【问题标题】:ActiveRecord conditional query with nesting带有嵌套的 ActiveRecord 条件查询
【发布时间】:2019-08-07 10:32:23
【问题描述】:

我有一个具有以下嵌套结构的 ActiveRecord 模型:

#<Model id: 2, list_name: "Freddo", extra_data: {"users_count"=>2000}>

我想根据 users_count > 1000 的条件执行查询以返回所有记录。这样:

Model.where("extra_data.users_count > 1000")

现在,如果上面的代码是一个嵌套数组,它可能会起作用,但是当它被包裹在花括号中时,我该如何访问它呢?

【问题讨论】:

  • 你能分享架构细节@ugotchi吗?
  • extra_data 列的类型是什么?
  • 如果你可能有很多这样的情况,最好让extra_data成为一个可以加入的单独表,这样你就可以这样查询:@987654324 @

标签: ruby-on-rails database activerecord


【解决方案1】:

考虑到 extra_data 作为 JSONB 或 JSON 列,您可以执行以下操作

Model.where("CAST(extra_data -&gt;&gt; 'users_count' AS NUMERIC) &gt; ?", 1000)

Postgres JSON 运算符-&gt;&gt; 会以文本形式返回结果,并将值转换为整数并与值进行比较。

参考 - https://www.postgresql.org/docs/9.5/functions-json.html https://edgeguides.rubyonrails.org/active_record_postgresql.html#json-and-jsonb

【讨论】:

猜你喜欢
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2020-06-20
  • 2012-09-19
相关资源
最近更新 更多