Ruby on rails 将PostgreSQL中的数组值与ActiveRecord匹配

Ruby on rails 将PostgreSQL中的数组值与ActiveRecord匹配,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,在我的Rails 4应用程序中,我的目标是查看所有联系人,其中联系人表中的可见字段等于1。我的可见对象是:整数,数组:true 但是,我得到以下例外情况: PG::UndefinedFunction:错误:运算符不存在:整数[]=integer 第1行:…..*从contacts.visible_到1或。。。 ^ 提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换:选择contacts.*FROM contacts WHERE contacts.visible\u to,按1

在我的Rails 4应用程序中,我的目标是查看所有联系人,其中联系人表中的可见字段等于1。我的可见对象是:整数,数组:true

但是,我得到以下例外情况:

PG::UndefinedFunction:错误:运算符不存在:整数[]=integer 第1行:…..*从contacts.visible_到1或。。。 ^ 提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换:选择contacts.*FROM contacts WHERE contacts.visible\u to,按1顺序由DESC创建

我搜索了答案,就我所见,有一个问题是一种可见的问题。然而,我找不到解决办法。我也试图从这个暗示中获益,但徒劳无功

我的迁移:

class AddVisibleToToContacts < ActiveRecord::Migration
    def change
      add_column :contacts, :visible_to, :integer, array: true, default: [], using: 'gin'     
    end 
end

您的迁移看起来非常直接和正确

你能试试这个吗

Contact.where('visible_to IN ?', ['1', '2'])

这两个网站:

似乎这种语法应该可以工作:

@contacts_all_user_sorted = Contact.all.where("visible_to @> ARRAY[?]", [1])
它有用吗


注意:正如@Quertie在评论中指出的,您可能希望在字符串数组的情况下通过将数组[?]替换为数组[?]::varchar[]

Hi来强制转换值。您在迁移文件中编写defalult而不是default是正常的吗?Thx,这只是一个输入错误。在迁移过程中,一切都很好。我会简要介绍问题的原因。1一次又一次的RTFM,不仅是ActiveRecord,还有2我太过依赖于类似的问题,这与我无关,因为PostgreSQL特定?.Ajit,thx需要帮助。以下是控制台的结果:联系人加载0.3ms选择联系人。*从“1”中可见的联系人,从“2”联系人加载0.3ms选择联系人。*从“1”中可见的联系人,从“2”PG::SyntaxError:错误:语法错误在“1”行或附近1:。。。联系人。*从“1”和“2”中可见的联系人…P.S。最后的输出错误是output error:看起来列中可见的_是整数。对吗\n请尝试联系。在“visible_to in”的地方,[1,2]我也在考虑这个问题,但据我从手册中了解,我需要在数组中定义一种类型的元素,对吗?我尝试了你的建议,在本例中我得到了:输出错误:联系人。其中:visible_to=>[1,2,3]尝试此操作此操作在字符串数组上不起作用,并给出错误ActiveRecord::StatementInvalid:PG::UndefinedFunction:error:运算符不存在:字符变化[]@>text[]。通过将数组[?]更改为数组[?]::varchar[]修复了此问题。感谢您的评论@Qwertie。我将在我的回答中加一条注释。
@contacts_all_user_sorted = Contact.all.where("visible_to @> ARRAY[?]", [1])