Глобальный поиск автозаполнения с помощью Ransack gem и EasyAutoComplete (поисковый запрос не работает) - PullRequest
0 голосов
/ 26 июня 2018

Я в своем уме на этом.Я пытаюсь реализовать этот учебник для глобальной панели поиска автозаполнения, которая ищет в базе данных ключевые слова и перечисляет их.Я видел этот вопрос , этот , этот , этот и некоторые другие.Ни один из них не решил мою проблему.

Поисковый запрос просто не возвращает никаких результатов, плюс автозаполнение не запускается.Однако я все еще могу выполнять вызовы функции easyAutocomplete, как показано в официальном руководстве .И у меня нет ошибок (по крайней мере, на поверхности).

Вот мои примеры кода:

rout.rb:

Rails.application.routes.draw do

  resources :photo_uploads

  #......................

  resources :posts do
    put 'publish' => 'posts#publish', on: :member
    put 'unpublish' => 'posts#unpublish', on: :member
  end
  get :search, controller: :posts
  root to: 'static_pages#home'

  get 'static_pages/about'

  get 'static_pages/contact'

end

application_controller.rb:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :search


#.....................
  def search
    @q = Post.ransack(title_cont: params[:q])
    @searchpost= @q.result(distinct: true) 
    # @bodysearch = Post.ransack(body_cont: params[:q]).result(distinct: true) 

    respond_to do |format|
      format.html {}
      format.json {
        @searchpost = @searchpost.limit(6) 
        # @bodysearch = @bodysearch.limit(6)
      }
    end 
  end
end

файл erb:

<%= search_form_for @q do |f| %>
    <%= f.search_field :title_cont, class: " search-bar ml-3", data: { behavior: "autocomplete" } %>
     <%= f.submit %>
<% end %>

search.json.jbuilder:

json.posts do
  json.array!(@posts) do |post|
    json.title post.title
    json.url post_path(post)
    json.published post.published_at
  end
end

search.js:

document.addEventListener("turbolinks:load", function () {
  $input = $("[data-behaviour='autocomplete']")

  var options = {
    getValue: "title",
    url: function (phrase) {
      return "/search.json?q=" + phrase;

    },
    categories: [
      {
        listlocation: "posts",
        header: "<strong>Posts</strong>",
      }
    ],
    list: {
      onChooseEvent: function () {
        var url = $input.getSelectedItemData().url
        $input.val("")
        Turbolinks.visit(url)
      }
    }
  }
  $input.easyAutocomplete(options)
});

posts_controller.rb:

before_action :force_json, only: :search

# .............

private

    def force_json
      request.format = :json
    end 

Я использую устройствоgem для аутентификации и cancancan для пользовательских ролей / доступа.Они работают просто отлично.Версия рельсов: 5.1.6

Что я делаю не так?

...