嗨我的搜索查询有问题,有3个值(val1,val2,tags),其中一个是数组(标签)。我知道rails不支持数组,但Postgres支持数组,我安装了它。
我有一个模特行动:
def self.find_object(val1, val2, tags)
if tags.blank?
Object.where( val1: val1, val2: val2 ).to_a
else
Object.where( "val1 = ? and val2 = ? and tags = [?]", val1, val2, tags).to_a
end
end
但是我收到了一个错误:
PG :: SyntaxError:ERROR:语法错误在或附近" ["第1行:......这里(val1 =' Ziemia'和val2 =' 1'和标签= [' Jadeit'] ...... ^:SELECT&# 34;对象"。* FROM"对象" WHERE(val1 =' Ziemia'和val2 =' 1'和tags = [' Jadeit&# 39;])
我的问题是我不知道如何处理数组搜索。在我的测试应用中,代码如下>> Student.where("hobby && ARRAY[?]", hobby)
爱好是一个数组工作,所以这是我在这个例子中的开始。我会很高兴有任何提示如何处理这个:)
编辑:添加了错误消息
答案 0 :(得分:0)
在PostgreSQL中创建数组有两种语法:
ARRAY[1,2,3]
'{1,2,3}'
所以其中任何一个都可行:
Object.where( "val1 = ? and val2 = ? and tags = ARRAY[?]", val1, val2, tags).to_a
# or
Object.where( "val1 = ? and val2 = ? and tags = '{?}'", val1, val2, tags).to_a
但请注意,当使用'{}'
语法时,PostgreSQL要求字符串使用双引号(而不是通常的单引号),因此使用字符串数组和ActiveRecord的语法将失败。我建议你总是使用永远不会失败的ARRAY[]
语法。