ruby-on-rails - Searchkick + Bloodhound + Typeahead 自动完成

标签 ruby-on-rails elasticsearch typeahead.js bloodhound searchkick

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

模型:

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"] 

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

Controller :

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:

  <%= form_tag doctors_path, method: :get do %>
    <div class="form-group">
      <%= text_field_tag :query, params[:query], class: 'form-control typeahead', autocomplete: "off" %>
      <%= submit_tag 'Search', class: 'btn btn-primary' %>
    </div>
  <% end %>

最后是 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);

这是使用的脚本标签:

<script type="text/javascript" src="https://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js"></script>

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

最佳答案

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

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

关于ruby-on-rails - Searchkick + Bloodhound + Typeahead 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28654125/

相关文章:

jquery - Bootstrap Modal 未关闭数据关闭 (Rails)

javascript - 如何在 Rails View 中的条件中调用 javascript 函数?

java - 如何连接到 AWS Elasticsearch?

indexing - 在 Elasticsearch 中删除别名和索引

ruby-on-rails - 将自定义国家/地区字段选项添加到 country_select ruby​​ on rails gem

javascript - css 文件不加载 application.scss

elasticsearch - 是否在kibana中删除索引,在 Elasticsearch 中也删除相同的索引?

typeahead.js - 为typeahead.js远程选项的Ajax调用添加额外的数据

javascript - 为什么 Twitter Typeahead 不适用于 React js?

typeahead.js - 猎犬识别错误?