我正在尝试使用rails实现twitter typeahead。 我使用searchkick gem和elasticsearch完成了这项工作。
这里有一个小问题,我的BloodHound远程调用是这样的
var engine = new Bloodhound({
datumTokenizer: function(d) {
console.log(d);
return Bloodhound.tokenizers.whitespace(d.username);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: "../users/autocomplete?query=%QUERY"
}
});
现在在这里,而不是将%QUERY替换为typeahead搜索框的值,它只是给出字符串%QUERY。
休息一切正常,因为如果我转到网址
http://localhost:3000/users/autocomplete?query=vive
我得到了理想的结果。
只是%QUERY没有被替换。
这是表格
<%= form_tag users_path, class:'ui form',method: :get do %>
<div class="ui small icon input">
<%= text_field_tag :query, params[:query],class:'typeahead',id:'user_search',placeholder:'Search Breeder' %>
<i class="search icon"></i>
</div>
<%end%>
和控制器
def autocomplete
render json: User.search(params[:query],autocomplete:true).map{|user| {username:user.username,value:user.id}}
end
/ 的routes.rb /
resources :users do
collection do
get :autocomplete
end
end
有人可以帮忙。
答案 0 :(得分:0)
好吧,经过努力寻找答案,我不知何故让它发挥作用。
所以对于那些被困在同一个地方的人来说,这就是解决方案:
var engine = new Bloodhound({
datumTokenizer: function(d) {
console.log(d);
return Bloodhound.tokenizers.whitespace(d.username);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: "../users/autocomplete?query=%QUERY",
//add wildcard to make it work
wildcard:"%QUERY"
}
});
希望它有所帮助。