首页 > 解决方案 > 带有嵌套的 ActiveRecord 条件查询

问题描述

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

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

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

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

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

标签: ruby-on-railsdatabaseactiverecord

解决方案


考虑到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


推荐阅读