Как создать функцию поиска для поиска по нескольким моделям, таким как GitHub? - PullRequest
2 голосов
/ 25 марта 2011

Мне интересно, как реализовать функцию поиска, такую ​​как Github. Всего одно поле поиска в верхнем правом углу, и при поиске по ключевому слову отображаются результаты для репозитория, кода и пользователя.

Есть ли учебник или пример для реализации этого на Rails 3?

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Вам нужно будет выполнить несколько запросов, по одному на модель, и собрать результаты в одном представлении.

Если ваш вопрос «как мне выполнить полнотекстовый поиск по нескольким моделям activerecord в СУХОЙ форме», тогда в основном есть два пути:

Распространенное, но немного сложное решение - использовать на вашей машине выделенного демона, например Sphinx . Sphinx - это сервис (например, Apache или MySQL), который индексирует ваш контент и позволяет вам выполнять поиск. Вы можете использовать драгоценный камень Thinking Sphinx , чтобы легко общаться с ним с рельсов. Альтернативой Сфинксу является Solr (для него также есть драгоценный камень под названием Sunspot )

Если вы используете Postgresql, есть более простая альтернатива, которая не требует запуска внешних служб на вашем сервере. Postgresql имеет некоторые встроенные возможности полнотекстового поиска. Есть драгоценный камень под названием textile , который помогает использовать эти сервисы с рельсов. Вы можете заставить это работать очень быстро.

1 голос
/ 25 марта 2011

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

Используйте Rails для создания небольшой формы, содержащей текстовое поле. Когда оно будет отправлено, возьмите значение поля и выполните запрос, используя его в качестве поискового запроса.

Если вы не уверены, как выполнять запросы с использованием ActiveRecord, см. " Интерфейс запросов Active Record " для хорошего обзора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...