Прежде всего вам понадобятся две части:
- Клиент (автозаполнение 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
Я надеюсь, что это сработает для вас