我有一個整數數組,我需要找到任何記錄,其中的數組中的某個整數與存儲在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])