如何查询数组类型列?Rails中匹配数组元素的查询方法
查询PostgreSQL数组列包含指定值的Rails ActiveRecord方案
如果你使用的是PostgreSQL数据库(Rails中数组类型列通常基于PostgreSQL实现),可以通过以下几种方式实现你需要的查询:
方法1:使用PostgreSQL原生数组操作符@>
PostgreSQL的@>操作符用于判断左侧数组是否包含右侧数组,我们可以将查询值包装成单元素数组来匹配:
Condition.where('trigger_values @> ARRAY[?]::integer[]', query_value)
- 这里的
::integer[]指定数组类型,如果你的trigger_values是字符串数组,替换为::text[]即可。 - 当
query_value = 3时,这条语句会返回id为1和3的记录。
方法2:使用ANY函数简化查询
通过ANY函数检查值是否存在于数组中,写法更直观:
Condition.where('? = ANY(trigger_values)', query_value)
方法3:Rails 5+ 便捷语法
从Rails 5开始,ActiveRecord对PostgreSQL数组列提供了更简洁的查询支持,直接传入值即可:
Condition.where(trigger_values: query_value)
Rails会自动将其转换为对应的ANY查询,效果和方法2一致。
内容的提问来源于stack exchange,提问作者Sachin Singh
相关产品推荐
相关产品推荐

