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)