Рельсы, где 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) должен сделать трюк;)
Ответ 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), проверьте ответ Эдгарса Джекасона.