使用Jquery自动完成功能,当我输入前三个字母时,我会获得所有管理器的完整列表,而我只能获得一个。我的项目控制器有以下代码
def project_list
list=Project.all.map{|i|i.manager_user_id}
arr= [].concat(list.sort{|a,b| a[0]<=>b[0]}).to_json
render :json =>arr
end
我做错了吗?
Application.js
function log(message) {
$( "<div/>" ).text( message ).prependTo("#log");
}
$("#tags").autocomplete({
minLength: 2,
source: function(request, response) {
$.ajax({
url: "/managerlist",
dataType: "json",
data: {
style: "full",
maxRows: 12,
term: request.term
},
success: function(data) {
var results = [];
$.each(data, function(i, item) {
var itemToAdd = {
value: item,
label: item
};
results.push(itemToAdd);
});
return response(results);
}
});
}
});
在上面的图片中,我输入'Arm',我只能显示'Deshawn Armstrong',而是显示完整列表
编辑:
<p>
<%= f.label :project_name %><br />
<%= f.text_field :project_name %>
</p>
<p>
<%= f.label :manager_user_id %><br />
<%= f.text_field :manager_user_id, :id => "term"%>
</p>
上面是包含表单的mangerlist页面。从你向我解释的内容,我认为你必须像我上面所做的那样在页面上加上var'term'?
答案 0 :(得分:1)
您是否按request.term
过滤了结果?如果不是,那么整个经理列表将作为匹配字符串返回。
Request.term应该发送到您的url: "/managerlist"
,并且应该返回按术语过滤的结果。
因此,当您通过ajax:/managerlist?term=arm
发送时,您的网址将如下所示。获取请求var term
并按其过滤列表。这必须在用ruby编写的managerlist
页面上完成(我相信)。
实际上,我所说的是ruby页面中的list
必须返回按term
值过滤的数据:
def manager_list
list=Project.all.map{|i|i.manager_user_id}
arr= [].concat(list.sort{|a,b| a[0]<=>b[0]}).to_json
render :json =>arr
end
list
应仅包含按term