Rails 3.2.1 Jquery автозаполнение - PullRequest
2 голосов
/ 02 марта 2012

Я застрял на этом несколько дней. Я использовал 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 осуществлялся в режиме реального времени для базы данных и соответственно корректировал представление.

Я новичок с рельсами, поэтому я уверен, что совершаю глупую ошибку здесь. Любая помощь будет так цениться.

Спасибо

1 Ответ

1 голос
/ 02 марта 2012

Похоже, что вы не ставите какие-либо подстановочные знаки в своем заявлении "лайк"

@opportunities = Opportunity.order(:name).where("name like ?", "#{params[:term]}")  

должно быть

@opportunities = Opportunity.order(:name).where("name like ?", "%#{params[:term]}%") 

Это связано с другим вопросом: Как искатьдля текста с активной записью в Ruby on Rails 3?

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