【问题标题】:Querying a Postgres array of integers in Rails在 Rails 中查询 Postgres 整数数组
【发布时间】:2015-07-04 02:41:43
【问题描述】:

我的模型有一个 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

【问题讨论】:

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


    【解决方案1】:

    试试这些:

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

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

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

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

    【讨论】:

    • 能否添加迁移文件或架构?
    • MyModel.where("? = ANY(myarray)", '{42}') 应该是 MyModel.where("? = ANY(myarray)", '42') ?在第 9.6 页测试
    【解决方案2】:

    PG::UndefinedFunction: 错误: 运算符不存在: 整数 = 文本

    从这条消息看来,myarray实际上是一个text 类型的数组。检查该列以确保其类型正确。

    【讨论】:

    • 如果是真的试试MyModel.where("'?' = ANY(myarray)", 42)
    【解决方案3】:

    数组的名称似乎有问题,因为存在具有相似名称的关联,并且 rails automagic 与它发生冲突

    【讨论】:

      猜你喜欢
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2017-04-03
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      相关资源
      最近更新 更多