Рельсы, где LIKE и массив
Как я могу сделать что-то вроде этого?
myarray = ["name1","name2"]
Product.where('name ILIKE ?', %#{myarray}%)
Мне нужно получить все продукты, где имена похожи на name1
и name2
.
Возможно ли это?
Ответы
Ответ 1
Я думаю, вы хотите проверить все значения с помощью функции ILIKE
.
Вот как это делается в Postgres:
select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);
Попробуйте преобразовать в синтаксис Rails/Ruby следующим образом:
myarray_with_percetage_signs = ["name1","name2"].map {|val| "%#{val}%" }
Product.where("name ILIKE ANY ( array[?] )", myarray_with_percetage_signs)
Ответ 2
Если вы ищете строковое подобие в смысле равенства (например, LIKE 'string'
в SQL) where
принимает значения типа Hash:
Product.where(name: myarray)
Product.where(name: myarray).to_sql
# => SELECT "products".* FROM "products" WHERE "products"."name" IN ('x', 'y')
Однако, если вы хотите фильтровать подстроки (например, LIKE '%substring%'
в SQL), проверьте ответ Эдгарса Джекасона.
Ответ 3
Product.where('name IN (?)', myarray)
должен сделать трюк;)