我正在尝试在Rails应用中实现JQuery UI自动完成功能,我已经访问了这个question,但它没有帮助我。
我的问题是JQuery总是显示所有条目,我给出的输入无关紧要,它总是建议我每个条目。
这是我的代码:
JS:
$(function() {
$( "#customer_city_input_field_" ).autocomplete({
source: '/cities.json'
});
});
滑轨:
# GET /cities
# GET /cities.json
def index
@cities = City.all
list = @cities.map {|u| Hash[ id: u.id, label: "#{u.postcode} #{u.name}", name: u.name, dialing_code: u.dialing_code]}
respond_to do |format|
format.html
format.json {
render json: list
}
end
end
如果我访问domain.com/cities.json,我会得到以下输出:
[{“id”:1,“label”:“10000 City”,“name”:“City”,“dialing_code”:1234}]
此条目始终显示,因此自动完成功能正常... 我还尝试将源从资源更改为本地变量。
JS:
$(function() {
var availableCities = [{"id":1,"label":"1000 City","name":"City","dialing_code":1234}];
$( "#customer_city_input_field_" ).autocomplete({
source: availableCities
});
});
所以我做的是将/cities.json的输出复制到局部变量,自动完成就像魅力一样。它完全应该做它应该做的事情。如果我将源从Rails资源更改为局部变量,我知道为什么行为会有所不同吗?
答案 0 :(得分:1)
查看有关jquery自动完成小部件的文档,尤其是'source'选项:http://api.jqueryui.com/autocomplete/#option-source
它声明:
自动完成插件不会过滤结果,而是添加一个带有术语字段的查询字符串,服务器端脚本应使用该字段来过滤结果。例如,如果source选项设置为“http://example.com”并且用户键入foo,则会向http://example.com?term=foo发出GET请求
这意味着您将不得不编辑索引操作。如果存在参数term
,那么您应该执行@cities = City.where('name ILIKE ?', "%#{params[:term]}%")