Как выбрать нужное значение из списка?

Имеем две модели User и City. В форме создания нового User необходимо заполнить поле City, выбрав из выпадающего списка, подгружаемого из модели City. Список городов большой около 10000 и будет увеличиваться. Помещать все 10000 элементов option в select плохой вариант.
Как лучше решить эту задачу? Может есть готовое решение или gem?
Модель City взята для примера.
  • Вопрос задан
  • 2462 просмотра
Решения вопроса 1
@exvion Автор вопроса
Я решил эту задачу с помощью select2+ajax, спасибо, что указали направление.

rails g scaffold City text:string
rails g scaffold User name:string
bundle install

Gemfile
gem 'rails', '4.1.5'
    gem 'select2-rails'
    gem 'mysql2'


application.js
var ready;
ready = function() {
  $('#ajax-example').select2({
    minimumInputLength : 0,
    ajax: {
      url: "/cities.json",
      dataType: "json",
      quietMillis: 100,
      data: function(term) { return { q: term }},
      results: function(data) { 
        return { 
          results: $.map( data, function(city, i) { 
            return { id: city.id, text: city.text } 
          } ) 
        } 
      }
    },
    initSelection: function(element, callback) {
      var id=$(element).val();
      if (id!=="") {
        $.ajax("/cities/"+id+".json").done(function(data) {
          data ={ id: data.id, text: data.text } 
          callback(data);
        })
      }
    }       
  });
};
$(document).ready(ready);  //для работы с turbolinks
$(document).on('page:load', ready);


cities_controller.rb
class CitiesController < ApplicationController
      def index
        @cities = City.order('text').finder(params[:q])
        respond_with @cities
      end
    end


views/users/_form.html.erb
<div class="field">
      <%= f.label :city %><br>
      <%= f.hidden_field :city_id, :value =>@user.city_id, id: 'ajax-example', data: { source: cities_path } %>    
  </div>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
AMar4enko
@AMar4enko
select-2, нужно шарить в JS
Ответ написан
Комментировать
@caution
думаю что вам что-то наподобие этого нужно:
loopj.com/jquery-tokeninput

суть одна остается выгружать в JSON ваши города. Только не в поле а в селект
Ответ написан
Комментировать
@gsmetal
Select2 + ajax лучший вариант в данном случае.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы