Как мне выполнить запрос LIKE % в ActiveRecord?

#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}%")