我有一个整数数组,我需要找到任何记录,其中的数组中的某个整数与存储在postgres中的任何整数使用active记录。ActiveRecord检查数组中的任何值是否与postgres中的数值匹配值
我发现最接近的是this answer,它用于搜索一个int数组,但不能用于搜索数组。
以这种方式查找记录的最佳方法是什么?
我有一个整数数组,我需要找到任何记录,其中的数组中的某个整数与存储在postgres中的任何整数使用active记录。ActiveRecord检查数组中的任何值是否与postgres中的数值匹配值
我发现最接近的是this answer,它用于搜索一个int数组,但不能用于搜索数组。
以这种方式查找记录的最佳方法是什么?
找到问题
Model.where('array_in_db && ARRAY[?]::integer[]', [1,2,3])
的解决方案
我相信最好的方法是使用重叠(& &)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的扩展的宝石,你可以简单地做:
Model.where.overlap(column: [value1, value2])