Я застрял на этом несколько дней. Я использовал Railscasts # 102, пересмотренный как шаблон.
В конечном итоге я планирую разместить поле поиска в верхней строке меню, используя ajax, для запроса поля имени двух отдельных моделей, использующих автозаполнение jquery-ui, и при нажатии на ссылку непосредственно на действие show для выбранного результата поиска.
Но я еще не там, сейчас я просто пытаюсь заставить автозаполнение работать с одной моделью. Вот что у меня есть:
- Модель возможностей, поиск по атрибуту NAME
-Search Controller
def index
@opportunities = Opportunity.order(:name).where("name like ?", "#{params[:term]}")
render json: @opportunities.map(&:name)
end
Search.js.coffee
jQuery ->
$('#search').autocomplete
source: $('#search').data('autocomplete-source')
Вид поиска (/app/views/layouts/application.html.erb:
<%= text_field_tag 'search', nil, :class => 'search-query ui-autocomplete-input', :placeholder => 'Search', data: {autocomplete_source: search_path} %>
Когда я запускаю этот код, когда я набираю буквы в поле поиска (предположим, я набираю букву B), я получаю:
Запущен GET "/ search? Term = b" для 127.0.0.1 в 2012-03-01 15:17:40 -0800
Обработка с помощью SearchController # index как JSON
Параметры: {"term" => "b"}
Загрузка возможностей (0,3 мс) ВЫБЕРИТЕ «возможности». * ИЗ «возможностей» ГДЕ (имя, например, «b»). ЗАКАЗАТЬ по возможности.
Завершено 200 OK в 1 мс (Просмотров: 0,1 мс | ActiveRecord: 0,3 мс)
Теперь я ожидаю, что автозаполнение будет использовать B, выбрать все Имена в модели и сбросить их в автозаполнении; вместо этого я ничего не получаю, ничего не происходит.
Если я настрою свой взгляд следующим образом:
<%= text_field_tag 'search', nil, :class => 'search-query ui-autocomplete-input', :placeholder => 'Search', data: {autocomplete_source: @opportunities.map(&:name)} %>
Тогда автозаполнение будет работать, но каждая страница с панелью поиска будет загружать все условия поиска на стороне клиента. Имея потенциал в тысячи имен, я не хочу загружать все эти данные, я хочу, чтобы вызов ajax осуществлялся в режиме реального времени для базы данных и соответственно корректировал представление.
Я новичок с рельсами, поэтому я уверен, что совершаю глупую ошибку здесь. Любая помощь будет так цениться.
Спасибо