ruby-on-rails - 带有嵌套的 ActiveRecord 条件查询
问题描述
我有一个具有以下嵌套结构的 ActiveRecord 模型:
#<Model id: 2, list_name: "Freddo", extra_data: {"users_count"=>2000}>
我想根据 users_count > 1000 的条件执行查询以返回所有记录。这样:
Model.where("extra_data.users_count > 1000")
现在,如果上面的代码是一个嵌套数组,它可能会起作用,但是当它被包裹在花括号中时,我该如何访问它呢?
解决方案
考虑到extra_data
作为 JSONB 或 JSON 列,您可以执行以下操作
Model.where("CAST(extra_data ->> 'users_count' AS NUMERIC) > ?", 1000)
Postgres JSON 运算符->>
将以文本形式返回结果并将值转换为整数并与值进行比较。
参考 - https://www.postgresql.org/docs/9.5/functions-json.html https://edgeguides.rubyonrails.org/active_record_postgresql.html#json-and-jsonb
推荐阅读
- java - 使用准备好的语句在 MySQL 中验证 SHA2 - 更新:在 mysql 中存储密码以使用登录系统的安全 webapp 的最佳方法
- typescript - 打字稿接口允许类型键和字符串值
- javascript - 更改 JSON 数组中每个元素的颜色
- r - 有条件地将数据框中的值替换为另一个数据框中的值
- c++ - 如何使用 C++ 中的结构制作地图?
- javascript - 更改全局状态更改的输入占位符
- python - 我收到错误消息 ValueError: cannot insert Cluster_Label, already exists。我希望有人能帮我一把
- javascript - 单击按钮时电子可以执行节点吗?
- grpc - 简单的 gRPC 特使配置
- python - INSERT INTO 语句 - Python 正则表达式和 Sqlite