3

我正在尝试实现一个自动完成搜索栏,用于搜索我的 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 中替换autocompleteautocomplete.json

不过,我在控制台中得到了同样的错误(autocomplete.json代替autocomplete

你能帮我吗?

4

0 回答 0