我的模型有一个用于存储整数的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
答案 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与它相撞