Подтвердить что ты не робот

Rails: как найти_поля, содержащего определенную строку

У меня есть модель с именем Topic, которая имеет имя как поле.

Так сказать, у меня есть термин, который я ищу, яблоко.

Если я делаю

Topic.find_by_name("apple")

Я получаю запись с именем apple. Это хорошо - но как мне изменить find_by_name, чтобы он мог найти "яблочный сок", а также "яблоко" - в основном, найти имена, содержащие исходный запрос или точно соответствующие исходному запросу?

Edit: Спасибо за весь ответ. Я предполагаю, что я должен был быть немного более ясным ранее, но что, если я хочу найти по имени переменной (очевидно, я не собираюсь искать по имени "яблоко" каждый раз:))?

Как мне манипулировать Topic.where для размещения? Так что-то вроде...

@topic = Topic.where(......., @name)
4b9b3361

Ответ 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])

Ответ 5

Try

Topic.where("name like ?",'%apple%')
Topic.find(:all, :conditions => ["name like ?","%apple%"])