PostgreSQL жалуется, потому что ARRAY[?]
в конечном итоге становится text[]
(то есть массивом text
), где ваш столбец 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
в миграции), если у вас есть жесткое ограничение на то, как долго они должны быть (и даже тогда выможет использовать text
с ограничением CHECK).