Использовать модель в Ruby on Rails 3 в качестве источника для автозаполнения jQuery - PullRequest
0 голосов
/ 06 мая 2011

Я использую простой jQuery для автозаполнения, и он прекрасно работает, когда я локально определяю список опций в моем jQuery. Вот код (практически прямо с сайта jQuery):

<script>
jQuery(function() {
    var easy = [
        "one",
        "two",
        "three",
    ];
    jQuery( "#tags" ).autocomplete({
        source: easy
    });
});
</script>



<div class="demo">

<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags">
</div>

То, что я хочу сделать, это передать данные в модель, которую я назвал пользователем, которая имеет атрибуты: name и: business_name, и использовать записи в этой модели для параметров. Могу ли я передать эти данные в мою переменную jQuery или это выполняется другим способом?

1 Ответ

2 голосов
/ 11 мая 2011

Прежде всего вам понадобятся две части:

  • Клиент (автозаполнение jQuery UI)
  • Бэкэнд (Предоставление данных)

Вы не можете напрямую запросить модель из своего кода JavaScript, запрос должен быть выполнен через контроллер.

Сначала взгляните на документацию и примеры jQuery Autocomplete здесь .

Что вы видите, так это то, что в результирующем запросе будет параметр «term», это то, что вы начинаете вводить в поле ввода.

Итак, запрос выглядит примерно так:

http://yourdomain.com/yourcontroller?term=whatyoutype

jQuery хочет получить массив, содержащий хэши в формате JSON, например:

[{"label": "Formatted Name to Show in List for first match", "value": 1}, {"label": "Formatted Name for Match #2", "value": 2}]
Метка

: будет отображаться в списке автозаполнения значение: значение, которое будет использоваться при выборе записи (например, выпадающий список)

Я бы предложил создать контроллер с именем UsersController, чтобы запрос выглядел как

http://yourdomain.com/users?term=whatyoutype

class UsersController < ApplicationController


  def index

    # general model
    @users  = User

    # check if we should filter results
    if params.has_key?(:term) && !params[:term].empty?
      q = "#{params[:term]}%"
      @users  = @users.where("name LIKE ? OR business_name LIKE ?", q, q)
    end

    # only 20 entries
    @users  = @users.limit(20) 


    # respond in the right format
    respond_to do |format|
      # normal html layout
      format.html
      # json for jquery
      format.json do 
        # make an array
        @users.map! do |u| 
          {
            :label => u.name + " / " + u.business_name,
            :value => u.id
          }
        end
        render :json => @users 
      end
    end
  end
end

Теперь вы можете активировать автозаполнение, например:

jQuery( "#tags" ).autocomplete({
    source: '<%= users_path(:format => :json) %>'
});

users_path(:format => :json) сгенерирует путь типа /users.json?term=yoursearchterm

Я надеюсь, что это сработает для вас

...