#ruby-on-rails #ruby-on-rails-3.1
#ruby-on-rails #ruby-on-rails-3.1
Вопрос:
Я работаю над своим первым веб-сайтом, используя Ruby on Rails. Идея заключается в «поисковой системе» по питанию, в которой вы ищете пищу, а затем веб-приложение выводит вас либо на страницу с информацией о питании для этой пищи, либо на страницу результатов поиска, если точного соответствия не существует.
На данный момент я создал базу данных информации о питании (используя Postgresql) и добавил некоторые тестовые данные. Это команда, которую я использовал для создания каркаса для базы данных:
rails generate scaffold Food name:string calories:decimal portion_name:string
portion:decimal image_url:string description:text
Затем я создал индексную страницу. Это команда, которую я использовал для создания индекса:
rails generate controller home index
Я удалил public/index.html
и изменил config/routes.rb
, чтобы содержать эту строку:
root :to => 'home#index'
После этого я добавил форму поиска в app/views/home/index.html.erb
, например, так:
<div id="search">
<h1>How many calories are in... ?</h1>
<%= form_tag("/search", :method => "get") do %>
<%= text_field_tag "q", nil, :class => "span6" %>
<%= submit_tag("Go", :name => nil) %>
<% end %>
</div>
Теперь я хотел бы подключить эту форму поиска, чтобы при точном совпадении с поисковым запросом или близком совпадении пользователь перенаправлялся непосредственно на страницу, отображающую информацию (из базы данных) для этого продукта. Если нет точного совпадения, я бы хотел, чтобы пользователю была представлена страница результатов и ссылки на страницу питания для каждого результата.
Как я могу реализовать эту функциональность? Я пробовал искать в Google статьи о реализации поиска с помощью Rails, и я также смотрел скринкаст, но ни один из ресурсов, которые я нашел, не реализует именно то, что я хочу.
Вот ссылка GitHub на проект до сих пор: https://github.com/robertseaton/nutrition-project .
Ответ №1:
Я использую Thinking-Sphinx для поиска в Rails — Sphinx — это поисковый сервер с открытым исходным кодом. Вы можете определить, как вы хотите, чтобы ваш поиск работал прямо в Rails.
Комментарии:
1. Меня интересует поиск только в одном поле, поэтому я думаю, что использование Sphinx было бы излишним.
2. Вы собираетесь индексировать поле? Если вы собираетесь выполнять поиск по любому слову в поле «имя» и если вам нужна масштабируемость, вам нужно сохранить индекс слов в этом поле. Это то, что делает Sphinx (среди прочего). Если вы не индексируете отдельные слова, но хотите выполнить поиск по ним, вы в конечном итоге будете последовательно сканировать каждое слово в этом столбце.
Ответ №2:
Вы также можете использовать sunspot для удовлетворения ваших потребностей в поиске. Вот ссылка sunspot на github https://github.com/sunspot/sunspot .
Используя sunspot, вы можете указать, какие все элементы будут доступны для поиска, например, продукты питания, калории и т. Д., А также присвоить этим элементам различные веса, чтобы, если есть совпадение ключевых слов, скажем, между food и protien, результат которого должен отображаться вверху.
sunspot wiki на github содержит много ресурсов, которые помогут вам начать, и это очень интуитивно понятно для реализации :).
Спасибо,