Rails: как найти_поля, содержащего определенную строку
У меня есть модель с именем Topic, которая имеет имя как поле.
Так сказать, у меня есть термин, который я ищу, яблоко.
Если я делаю
Topic.find_by_name("apple")
Я получаю запись с именем apple. Это хорошо - но как мне изменить find_by_name, чтобы он мог найти "яблочный сок", а также "яблоко" - в основном, найти имена, содержащие исходный запрос или точно соответствующие исходному запросу?
Edit:
Спасибо за весь ответ. Я предполагаю, что я должен был быть немного более ясным ранее, но что, если я хочу найти по имени переменной (очевидно, я не собираюсь искать по имени "яблоко" каждый раз:))?
Как мне манипулировать Topic.where для размещения?
Так что-то вроде...
@topic = Topic.where(......., @name)
Ответы
Ответ 1
Я думаю, что что-то вроде этого должно работать:
Topic.where("name like ?", "%apple%")
Размещение для редактирования:
Topic.where("name like ?", "%#{@search}%")
Базовая строковая интерполяция, вы используете значение @search
внутри строки %%
, поэтому вы @search = "apple"
, после чего вы получите %apple%
Ответ 2
Похоже, в Rails 3 вы хотели бы использовать где:
Topic.where("name ILIKE ?", "%apple%")
Ответ 3
Не ставьте строку прямо так. Его называют SQL-инъекцией. Вместо этого вы должны использовать .where
:
Topic.where("name like '?%' ", params[:name])
Ответ 4
В PostgreSQL вы также можете использовать сопоставить операторы:
Topic.where("name ~* ?", @search)
Ответ 5
Try
Topic.where("name like ?",'%apple%')
Topic.find(:all, :conditions => ["name like ?","%apple%"])