我有一个int数组,我需要找到任何记录,其中我的数组中的一个int匹配使用活动记录存储在postgres中的数组中的任何一个int。
我找到的最接近的是this answer,它可以搜索一个带有一个int的数组,但不能用于搜索数组。
以这种方式查找记录的最佳方法是什么?
答案 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])