我正在尝试实现一个自动完成搜索栏,用于搜索我的 Rails 4.2 应用程序中的帖子。我在前端安装了 elasticsearch、searchkick gem 和 typeahead.js 用于自动完成。
为此,我遵循了一个教程(https://shellycloud.com/blog/2013/10/adding-search-and-autocomplete-to-a-rails-app-with-elasticsearch)并设置了以下内容:
在我的routes.rb
我已经设置了这样的收集路线:
resources :posts do
collection do
get :autocomplete
end
resources :attachments
end
在我的Post.rb
模型中:
searchkick autocomplete: ['title', 'excerpt']
在我的posts_controller.rb
def index
if params[:query].present?
@posts = Post.search(params[:query])
end
end
def autocomplete
render json: Post.search(params[:query], autocomplete: true, limit: 10).map do |post|
{title:post.title, excerpt: post.excerpt}
end
end
在我的posts.js
$(document).ready(function() {
var posts = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: "/posts/autocomplete?query=%QUERY",
remote: {
url: "/posts/autocomplete?query=%QUERY"
}
});
$('#query').typeahead({
name: 'posts',
display: 'title',
source: posts
});
})
最后,在我看来,index.html.haml
我有:
=form_tag(posts_path, method: :get) do
=text_field_tag(:query, params[:query], autocomplete: 'off', class: 'typeahead')
%input{:type=>"submit", :value=> t('search')}
当我在搜索框中输入内容时,我得到了这个:
GET XHR http://localhost/posts/autocomplete [HTTP/1.1 400 Bad Request 177ms]
我不知道发生了什么事。对于它的价值,我尝试过点击http://localhost/posts/autocomplete.json?query=something
,它的工作原理是它会返回匹配的结果。我也尝试在上面发布的 JS 中替换autocomplete
为autocomplete.json
。
不过,我在控制台中得到了同样的错误(autocomplete.json
代替autocomplete
)
你能帮我吗?