Searchkick + Bloodhound + Typeahead用于自动完成

我正在尝试为单个属性实现一个简单的自动完成function

模型:

searchkick text_start: [:name],autocomplete: ['name'] 

重新编制Rails控制台上的行为索引后就可以了。

 2.2.0-p0 :002 >Doctor.search("a", autocomplete: true).map(&:name) gives the output- => ["a", "aa", "aaa", "aaaa"] 

在此之后,我将自动完成操作添加到控制器,并将新路由添加到routes.rb文件。

控制器:

 def autocomplete console.log("In auto") render json: Doctor.search(params[:query], autocomplete: false, limit: 10).map(&:name) end 

路线:

 resources :doctors do collection do get :autocomplete end end 

此时,如果我只是测试以下URL:

 http://localhost:3000/doctors/autocomplete?query="a" 

然后我在浏览器中获得预期的结果

 ["a", "aa", "aaa", "aaaa"] 

现在添加一个搜索框。

_header.html.erb:

   

最后是Javascript:

 var ready; ready = function() { var numbers = new Bloodhound({ remote: {url: "/doctors/autocomplete?query=%QUERY"}, datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.name); }, queryTokenizer: Bloodhound.tokenizers.whitespace }); // initialize the bloodhound suggestion engine var promise = numbers.initialize(); promise .done(function() { console.log('success!'); }) .fail(function() { console.log('err!'); }); // instantiate the typeahead UI $( '.typeahead').typeahead(null, { displayKey: 'name', source: numbers.ttAdapter() }); } $(document).ready(ready); $(document).on('page:load', ready); 

这是使用的脚本标记:

  

在搜索任何内容时,搜索框都没有显示任何响应,Google Chrome控制台上也没有显示任何错误。

您需要返回哈希以响应自动完成操作:

 def autocomplete render json: Doctor.search(params[:query], autocomplete: true, limit: 10).map {|doctor| {name: doctor.name, value: doctor.id}} end 
Interesting Posts