Я в своем уме на этом.Я пытаюсь реализовать этот учебник для глобальной панели поиска автозаполнения, которая ищет в базе данных ключевые слова и перечисляет их.Я видел этот вопрос , этот , этот , этот и некоторые другие.Ни один из них не решил мою проблему.
Поисковый запрос просто не возвращает никаких результатов, плюс автозаполнение не запускается.Однако я все еще могу выполнять вызовы функции 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
Что я делаю не так?