如何在Rails中创建作用域过滤JSON列的指定键值
Rails JSON列筛选作用域实现方法
你的写法存在语法错误,Rails无法直接通过column["age"]: 12这种格式查询JSON列。需要根据你使用的数据库类型,采用对应的JSON查询语法来实现:
1. 若使用PostgreSQL(支持json/jsonb类型)
方法一:用->>操作符提取字符串值匹配
scope :age_filter, -> { where("你的列名 ->> 'age' = ?", '12') }
方法二:用@>操作符匹配JSON子对象
scope :age_filter, -> { where("你的列名 @> ?", { age: '12' }.to_json) }
2. 若使用MySQL(支持json类型)
方法一:调用JSON函数查询
scope :age_filter, -> { where("JSON_UNQUOTE(JSON_EXTRACT(你的列名, '$.age')) = ?", '12') }
方法二:用简化的->>操作符
scope :age_filter, -> { where("你的列名->>'$.age' = ?", '12') }
注意事项:
- 将
你的列名替换为实际存储JSON数据的列名 - 你的JSON中
age的值是字符串'12',所以查询条件要使用字符串'12';如果数据库中存储的是数字类型,则改为12
内容的提问来源于stack exchange,提问作者aj soprano
相关产品推荐
相关产品推荐

