首先你需要兩個部分來做到這一點:
- 客戶端(jQuery UI的自動完成)
- 後端(提供數據)
你不能直接查詢來自你的javascript代碼的模型,查詢必須通過一個控制器完成。
首先,看看jQuery自動完成文檔和示例here。
您所看到的是,結果請求將具有一個名爲「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
路徑我希望這會對你有用