[英]ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: operator does not exist: text % unknown
[英]ActiveRecord::StatementInvalid (PG::UndefinedFunction
我有一个复选框字段(car_options),该字段存储许多选择的值数组。
我需要查询包含另一个数组中任何值的所有Car记录。
[“ a”,“ b”,“ c”,“ d”,“ e”,“ f”]包含以下任何[[b],“ z”,“ v”]
t.string "car_options", default: [], array: true
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在内部以相同的方式处理text
和character varying
类型,因此您唯一一次对varchar
(AKA character varying
或迁移中的t.string
)感到烦恼的是,如果您对如何它们应该是多长(即使这样,您也可以使用带有CHECK约束的text
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.