Rails:让Bootstrap Typeahead工作的问题

时间:2016-05-31 00:45:29

标签: ruby-on-rails twitter-bootstrap autocomplete

在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

控制器:

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

但是,自动填充功能在我的搜索表单字段中无效。有明显的错误吗?我在开发控制台中看到没有错误,并且在我输入时似乎没有发生搜索(即后端控制台中没有发生任何事情)。

3 个答案:

答案 0 :(得分:2)

你应该使用Bloodhound,这是你的用例的先行建议引擎。请尝试以下操作,根据您的要求进行修改:

&#13;
&#13;
<script src="../node_modules/angular/angular.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

当前版本的typeahead.js不再具有默认的通配符参数didSet。如果要使用它,则必须明确配置它。

答案 2 :(得分:0)

你的模特中有searchkick autocomplete: [:title]吗?

class Movie < ActiveRecord::Base
  searchkick autocomplete: [:title]
  has_many: .....
end

尝试将autocomplete: true添加到autocomplete,您需要在进行更改后重新编制索引。