Rails: 使用Bootstrap Typeahead遇到问题

3
在Rails中,我已经实现了Searchkick,使其正常工作,即用户可以在我的搜索框中搜索并获得正确的搜索结果,被带到电影#index页面:
视图:
<%= form_tag movies_path, method: :get, :id=>"search" do %>
    <%= text_field_tag :query, params[:query], class: 'form-control', id: "movie_search" %>
    <button type="submit" class="btn btn-default">Search</button>
<% end %>

控制器:

def index
    if params[:query].present?
      @movies = Movie.search(params[:query], page: params[:page])
    else
      @movies = Movie.all.page params[:page]
    end
  end

但是我似乎无法让自动完成功能正常工作。这是我的自动完成操作:

路由:

resources :movies, only: :index do
collection do
  get :autocomplete 
end

end

Controller:

 def autocomplete
    render json: Movie.search(params[:query], {
      fields: ["title^5", "description"],
      limit: 10,
      load: false,
      misspellings: {below: 5}
    }).map(&:title)
  end

JS:

 $("#movie_search").typeahead({
        name: "movie",
        remote: "/movies/autocomplete?query=%QUERY"
      });

我已将Twitter的typeahead.js包含在我的供应商资产中并确认它已加载。我可以访问自动完成终端,获取如下的JSON数据:
http://localhost:3000/movies/autocomplete?query=war

.

[
"War Dogs",
"War Machine",
"Hart's War",
"Dirty Wars",
"Sorority Wars",
"Bride Wars",
"War Story",
"A War",
"War Pigs",
"War Witch"
]

然而,在我的搜索字段中,自动完成功能无法正常工作。是否有明显的错误?我在开发控制台中看不到任何错误,当我输入内容时,搜索似乎没有发生(即后端控制台没有出现任何变化)。


自动完成版本? - Raj
刚从主要的类型推断页面下载。v 0.11.1 - Jackson Cunningham
你从哪里找到这个远程示例的? - Raj
https://github.com/ankane/searchkick#heres-how-to-make-it-work-with-rails - Jackson Cunningham
3个回答

2

您应该使用Bloodhound,这是一个适用于您的用例的自动完成建议引擎。尝试以下内容,并根据您的要求进行修改:

var movies = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.whitespace,
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  remote: {
    wildcard: '%QUERY',
    url: '/movies/autocomplete?query=%QUERY',
    transform: function(response) {
      return response;
    }
  }
});

$('.typeahead').typeahead(null, {
  name: 'movie',
  source: movies
});


0

目前的typeahead.js版本不再具有默认的通配符参数%QUERY。如果您想使用它,必须明确配置。


0
你的模型中有 searchkick autocomplete: [:title] 吗?
class Movie < ActiveRecord::Base
  searchkick autocomplete: [:title]
  has_many: .....
end

尝试在您的autocomplete中添加autocomplete: true,并且在进行更改后需要重新索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接