在Rails中查询Postgres整数数组

时间:2015-04-25 12:47:04

标签: ruby-on-rails arrays postgresql ruby-on-rails-4 activerecord

我的模型有一个用于存储整数的pg数组

使用我从其他问题中找到的方法进行查询会产生错误或产生空白结果

MyModel.where("? = ANY (myarray)", 42)

给出

PG::UndefinedFunction: ERROR:  operator does not exist: integer = text

 MyModel.where("myarray @> '{?}'", 42)

给出一个空结果,但我确实有一个模型,其中42是数组中的一个整数

#<MyModel:0x007f9a77dd5608> {
                :id => 170,
      :myarray => [
    [0] 42,
    [1] 43,
    [2] 58,
    [3] 61,
    [4] 63
  ]

是否有一种特殊方法可以在Rails中的postgres数组中查询整数(或浮点数)?

迁移

class AddMyarrayToMyModel < ActiveRecord::Migration
  def change
    add_column :my_models, :myarray, :integer, array: true, default: []
    add_index  :my_models, :myarray, using: 'gin'
  end
end

和架构

t.integer  "myarray",                 default: [],              array: true

3 个答案:

答案 0 :(得分:11)

试试这些:

MyModel.where("? = ANY(myarray)", '{42}')

MyModel.where("myarray @> ?", '{42}')

或(根据York Yang的评论,在PG 9.6上)

MyModel.where("? = ANY(myarray)", '42') 

答案 1 :(得分:1)

  

PG :: UndefinedFunction:ERROR:运算符不存在:integer = text

从此消息中可以看出,myarray 实际上是类型为text的数组。检查该列以确保其类型正确。

答案 2 :(得分:0)

似乎有一个数组名称的问题,因为有一个类似名称的关联,rails automagic与它相撞