在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"
]
但是,自动填充功能在我的搜索表单字段中无效。有明显的错误吗?我在开发控制台中看到没有错误,并且在我输入时似乎没有发生搜索(即后端控制台中没有发生任何事情)。
答案 0 :(得分:2)
你应该使用Bloodhound,这是你的用例的先行建议引擎。请尝试以下操作,根据您的要求进行修改:
<script src="../node_modules/angular/angular.js"></script>
&#13;
答案 1 :(得分:0)
当前版本的typeahead.js不再具有默认的通配符参数didSet
。如果要使用它,则必须明确配置它。
答案 2 :(得分:0)
你的模特中有searchkick autocomplete: [:title]
吗?
class Movie < ActiveRecord::Base
searchkick autocomplete: [:title]
has_many: .....
end
尝试将autocomplete: true
添加到autocomplete
,您需要在进行更改后重新编制索引。