簡體   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