![](/img/trans.png)
[英]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.