加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用ActiveRecord匹配PostgreSQL中的数组值

发布时间:2020-12-17 02:22:55 所属栏目:百科 来源:网络整理
导读:在我的Rails 4应用程序中,我的目标是查看所有联系人,联系人表中的字段visible_to等于1.我的visible_to是:integer,array:true. 但是,我得到以下异常: PG :: UndefinedFunction:ERROR:运算符不存在:integer [] =整数 LINE 1:…. * FROM“contacts”WHER
在我的Rails 4应用程序中,我的目标是查看所有联系人,联系人表中的字段visible_to等于1.我的visible_to是:integer,array:true.

但是,我得到以下异常:

PG :: UndefinedFunction:ERROR:运算符不存在:integer [] =整数
LINE 1:…. * FROM“contacts”WHERE“contacts”.“visible_to”IN(1)OR …
?????????????????????????????????????????????????????????????^
提示:没有运算符匹配给定的名称和参数类型.您可能需要添加显式类型转换:SELECT“contacts”.* FROM“contacts”WHERE“contacts”.“visible_to”IN(1)ORDER BY created_at DESC

我搜索了答案,据我所知,有一种类型的visible_to存在问题.但是,我找不到解决方案.我也试图从演员提示中获益,但是徒劳无功.

我的迁移:

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

来自Controller的相关变量:

@contacts_all_user_sorted = Contact.all.where(visible_to: [1]).order("created_at DESC")

解决方法

从这两个网站:

> http://blog.relatabase.com/rails-postgres-arrays
> http://adamsanderson.github.io/railsconf_2013/#11

似乎这个语法应该工作:

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

它有用吗?

P.S:正如@Quertie在评论中指出的那样,你可能希望在String数组的情况下通过用ARRAY [?] :: varchar []替换ARRAY [?]来强制转换值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读