ActiveRecord检查数组中的任何值是否与postgres中的数组匹配

时间:2017-03-10 01:26:24

标签: ruby-on-rails arrays postgresql activerecord

我有一个int数组,我需要找到任何记录,其中我的数组中的一个int匹配使用活动记录存储在postgres中的数组中的任何一个int。

我找到的最接近的是this answer,它可以搜索一个带有一个int的数组,但不能用于搜索数组。

以这种方式查找记录的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

找到一个有效的解决方案

Model.where('array_in_db && ARRAY[?]::integer[]', [1,2,3])

答案 1 :(得分:-1)

我认为最好的方法是使用重叠(&&&)postgres运算符来完成您想要实现的目标。

在这里查看postgres文档 - https://www.postgresql.org/docs/9.1/static/functions-array.html

查询会看起来像是:

SELECT *
FROM table_name
WHERE column && {value1,value2};

编辑:改善答案。

在ActiveRecord中,您可以使用简单的where子句调用构建该查询,或者更好地安装https://github.com/DockYard/postgres_ext gem以便更容易集成。

如果您安装postgres扩展gem,您可以执行以下操作:

Model.where.overlap(column: [value1, value2])