在Rails中查询Postgres整数数组

Nic*_*nto 5 arrays postgresql activerecord ruby-on-rails ruby-on-rails-4

我的模型有一个pg数组,我用它来存储整数

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

MyModel.where("? = ANY (myarray)", 42)
Run Code Online (Sandbox Code Playgroud)

PG::UndefinedFunction: ERROR:  operator does not exist: integer = text
Run Code Online (Sandbox Code Playgroud)

 MyModel.where("myarray @> '{?}'", 42)
Run Code Online (Sandbox Code Playgroud)

给出一个空的结果,但我确实有一个42的模型作为数组中的一个int

#<MyModel:0x007f9a77dd5608> {
                :id => 170,
      :myarray => [
    [0] 42,
    [1] 43,
    [2] 58,
    [3] 61,
    [4] 63
  ]
Run Code Online (Sandbox Code Playgroud)

有没有一种特殊的方法来查询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
Run Code Online (Sandbox Code Playgroud)

和架构

t.integer  "myarray",                 default: [],              array: true
Run Code Online (Sandbox Code Playgroud)

Sha*_*med 11

试试这些:

MyModel.where("? = ANY(myarray)", '{42}')
Run Code Online (Sandbox Code Playgroud)

要么

MyModel.where("myarray @> ?", '{42}')
Run Code Online (Sandbox Code Playgroud)

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

MyModel.where("? = ANY(myarray)", '42') 
Run Code Online (Sandbox Code Playgroud)