#ruby #activerecord
#ruby #activerecord
Вопрос:
Я пытаюсь найти некоторые элементы, которые содержат определенную строку. Если я сделаю:
MyModel.where("description LIKE ?",keyword)
он сгенерирует запрос на точное совпадение. Я хотел бы заставить его генерировать LIKE %keyword%
запрос. Как я могу это сделать?
Ответ №1:
like_keyword = "%#{keyword}%"
MyModel.where("description LIKE ?", like_keyword)
Комментарии:
1. Это не работает. Сгенерированный запрос заканчивается следующим образом:
LIKE '%'keyword'%'
и он выдает исключение.2. Спасибо за это. Я также выполняю поиск с помощью
LIKE
оператора и был поставлен в тупик. Я также заранее определяю свойlike keyword
запрос, а затем выполняю:collection = Model.where("attribute like ?", "% #{keyword} %")
Ответ №2:
MyModel.where("description LIKE (?)", "%#{keyword}%")
Ответ №3:
Model.where("name LIKE 'SH%'")
Он извлечет все имена, начинающиеся только с SH. Это сработает на 100%.
например. SH123, SH2343
Комментарии:
1. Вывод этого запроса с территории -1. Если параметр name не отправлен пользователем, это хороший способ.
Ответ №4:
Для этого вы можете использовать ILIKE
MyModel.where("description ILIKE (?)", "%#{keyword}%")
Ответ №5:
Для PostgreSQL это будет
MyModel.where("description ILIKE ?", "%#{query}%")