繁体   English   中英

ActiveRecord :: StatementInvalid(PG :: UndefinedFunction

[英]ActiveRecord::StatementInvalid (PG::UndefinedFunction

我有一个复选框字段(car_options),该字段存储许多选择的值数组。

我需要查询包含另一个数组中任何值的所有Car记录。

[“ a”,“ b”,“ c”,“ d”,“ e”,“ f”]包含以下任何[[b],“ z”,“ v”]

架构

t.string "car_options", default: [], array: true

检查attr数组是否包含Rails中给定数组的任何元素

我的查询:

 Car.where('car_options && ARRAY[?]', ["4door","3seat"])

错误

ActiveRecord :: StatementInvalid(PG :: UndefinedFunction:错误:运算符不存在:字符变化[] && text [])第1行:... cars“。* FROM” cars“其中(car_options && ARRAY ['... ^

提示:没有运算符匹配给定的名称和参数类型。 您可能需要添加显式类型转换。 :从“汽车”中选择“汽车”。*(car_options && ARRAY ['BY'])LIMIT $ 1

PostgreSQL抱怨是因为ARRAY[?]最终是text[] (即text的数组),其中car_options列的character varying[]car_options character varying[] (即character varying数组)。

您可以转换数组文字:

Car.where('car_options && ARRAY[?]::varchar[]', ["4door","3seat"])

或将列设为text[]

t.text "car_options", default: [], array: true

我可能会选择后者,因为PostgreSQL在内部以相同的方式处理textcharacter varying类型,因此您唯一一次对varchar (AKA character varying或迁移中的t.string )感到烦恼的是,如果您对如何它们应该是多长(即使这样,您也可以使用带有CHECK约束的text )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM