2017-04-01 85 views
0

所以,我在一个表中 t.text "foo", default: [], array: trueRails的查询与对Postgres的阵列列

有此列,我已经在一个辅助文件这个数组列表,

module HelperData 

    Helper_array = [ 
    "data_1", 
    "data_2", 
    "data_3", 
    "data_4", 
    "data_5" 
    ] 
end 

里面FooName.rb模型有一个线include HelperData

所以我想通过的查询是包含运算符&&比较PG阵列,基于此Postgres Guide

我曾尝试以下查询:

FooName.where("foo" && HelperData::Helper_array)。此查询返回错误ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:。语法错误与HelperData::Helper_array中的元素有关。我有一个轻微的预感,这是因为Foo:text,但Helper_array的数据是string,虽然我不能确定。

FooName.where("foo && HelperData::Helper_array")。此查询返回错误ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:。显然这只是错误的语法。

查询foo数组是否有与Helper_array重叠的元素并返回所有具有重叠元素的FooName对象的正确查询是什么?

回答

0

尝试:

FooName.where("foo && ARRAY[?]::text[]", HelperData::Helper_array) 

参考此链接 https://www.postgresql.org/docs/current/static/functions-array.html

+0

'的ActiveRecord :: StatementInvalid:PG :: UndefinedFunction:ERROR:运营商不存在:文本[] &&字符改变[]'抛出此错误。 – angkiki

+0

em,对不起,发现列是'text'类型,而不是'string'类型。所以试试'FooName.where(“foo && ARRAY [?] :: text []”,HelperData :: Helper_array)'。我已经在我的导轨控制台中进行了测试,它正在工作。 –

+0

好的,谢谢!我会测试它,并检查你的答案是正确的,如果它的工作! :) – angkiki