2013-06-13 2 views
3

Я изучал сфинкс и смотрел учебник railscast, но мне не нужен полнотекстовый поиск. Я бы хотел, чтобы люди могли искать пользователя по имени или по электронной почте. И после того, как кто-то ищет пользователя по имени или электронной почте, он может дополнительно фильтровать его, добавив в город пользователя.Поиск и фильтры Rails

Я действительно не думаю, что для этого нужен полный текстовый поиск. Но я никогда не делал никаких поисков в рельсах, и я не знаю, как это сделать без драгоценного камня.

Я знаю, что это похоже на User.where (: name =>) на основе моего googling или что-то в этом роде, но я не уверен точно, как это делается или это хорошо для производительности.

Как я могу реализовать то, что хочу, и нужен ли полный текстовый поиск?

+0

Вы правы. Для этого не нужен полный текст. Полнотекстовый поиск был бы полезен, если бы вы хотели искать текст статей для определенного слова. То, что вы собираетесь делать здесь, - это поиск одного или нескольких пользователей, которые являются объектами ActiveRecord, строками в базе данных. Вы закончили [Rails Tutorial] (http://ruby.railstutorial.org/ruby-on-rails-tutorial-book?version=4.0#top)? –

+0

да, я. У него был небольшой абзац для поиска, и он упомянул о сфинксе мышления, а также связан с рельсами с 2007 года. Я полагал, что он устарел. –

+0

Я знаю, что есть находка по имени и найти мой метод электронной почты, встроенный в рельсы, но я не совсем уверен, как бы реализовать это в форме поиска и как дальше фильтровать его по городу. –

ответ

4

Две колонки WHERE:

User.where("name like ? or email like ?", "%steve%", "%gmail%")

Scoped город:

User.where("name like ? or email like ?", "%steve%", "%gmail%").where("city like ?", "%vegas%")

Обратите внимание, что не чувствителен к регистру Синтаксис LIKE отличается от одной базы данных в другую. Я использую Postgres, поэтому я забрасываю ILIKE для нечувствительных.

+0

Я использую Postgres. Должен ли я добавлять индексы по электронной почте, имени и городу для работы? И как я мог реализовать это в универсальном поиске? Значит, у меня есть фиксированная панель навигации на каждой странице с формой поиска. Я знаю, что форма будет запросом на получение, и я могу установить форму на определенный контроллер и действие (и указать его на контроллер поиска). Итак, в контроллере поиска у меня есть что-то вроде @search = User.search (params [: search]), создав свой код в методе поиска в модели User, но как бы я дополнительно отфильтровать его путем поиска, добавив окно поиска на страницу результатов? –

Смежные вопросы