Пример использования jquery auto complete плагин с рельсами

Было бы очень полезно, если бы кто-нибудь помог мне с примером реализации функции автозаполнения в моем приложении rails. Я попробовал плагин jquery auto complete. Я не смог этого достичь.

Мой контроллер:

def new    
@testers = User.find_by_sql("select * from users where id in(select user_id from user_role_assignments where role_id in (select id from roles where name like 'Tester')) order by name").paginate(:page=>params[:page],:per_page=>30)   
respond_to do |format|
  format.html # new.html.erb
  format.xml  { render :xml => @release }
      end
end

Я хочу создать автозаполнение для @testers

посмотреть код:

 = form.label :tester_tokens, "Testers" 
 = form.text_field :tester_tokens

Спасибо за вашу помощь,

Ramya.

1 ответ

Решение

Посмотрите на Gem https://github.com/crowdint/rails3-jquery-autocomplete. Это должно быть основой для вашей реализации. Существует даже пример приложения, в котором объясняется каждый шаг, который необходимо выполнить, чтобы включить его в свое приложение.

На Railscasts.com вы найдете эпизод, который объясняет, как его использовать: Ассоциация автозаполнения (исправлено)

Если это не работает для вас, вы должны вернуться и задать конкретные вопросы. Из приведенного выше вопроса не ясно, где вы хотите использовать автозаполнение. Обычно он используется для установления (дополнительной) связи с другим объектом, где вы хотите заменить выпадающий список, выбор в списке или список флажков на поле автозаполнения.

Существует альтернатива, если вы хотите выбрать более одной вещи, взгляните на эпизод Railscasts "Поля токенов". Поскольку ваш комментарий гласит, что это то, что вы хотите сделать, вот несколько советов, как это сделать (скопировано из моего приложения, вы должны заменить его своим контекстом, это короткая версия Railscasts 258):

  • Установите JQuery Tokeninput в ваше приложение Rails.
  • Убедитесь, что ваше приложение знает jquery (используя Gem jquery-rails)
  • Включить файл Javascript jquery.tokeninput.js в ваше приложение (синтаксис зависит от версии, которую вы используете).
  • Включите следующий код в вашу модель (User??):

    class User < ActiveRecord::Base
      attr_accessible :name, :tester_tokens
      has_many :testers
      attr_reader :tester_tokens
    
      def tester_tokens=(ids)
        self.tester_ids = ids.split(",")
      end
    
    end
    
  • Включить в свой application.js следующий код:

    $(function () {
      $('#user_tester_tokens').tokenInput('/testers.json', { 
          crossDomain: false,
          prePopulate: $('#user_tester_tokens').data('pre') })
    }); 
    
  • Включить в свой TestersController следующий код:

    class TestersController < ApplicationController
      def index
        @testers = Tester.where("name like ?", "%#{params[:q]}%")
        respond_to do |format|
          format.html
          format.json { render :json => @testers.map(&:attributes) }
        end
      end
    end
    
  • Измените в вашем представлении код следующей строки:

    = form.text_field :tester_tokens, "data-pre" => @user.testers.map(&:attributes).to_json
    

Вы найдете объяснение всех этих шагов, а также дополнительную информацию в эпизоде ​​Railscasts 258.

Другие вопросы по тегам