rails activerecord' where'搜索数组

时间:2015-08-02 08:24:58

标签: ruby-on-rails postgresql activerecord

嗨我的搜索查询有问题,有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)爱好是一个数组工作,所以这是我在这个例子中的开始。我会很高兴有任何提示如何处理这个:)

编辑:添加了错误消息

1 个答案:

答案 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[]语法。