Нумерация результатов поиска с помощью kaminari и ajax
Я работаю над приложением Rails 5 с mongoid и kaminari.
Само приложение будет содержать несколько текстов от 2 разных исследовательских групп и предоставлять различные функции для каждой. (Один из них - это тот "баталь", который вы увидите там.)
Одной из функций является поиск текста или некоторых частей текста, но это не проблема. Я уже могу успешно искать и показывать результаты. Проблема заключается в разбиении этих результатов на страницы.
Моя нумерация страниц работает при отображении всех текстов, касающихся действия index, я реплицировал решение index.js.erb в документах kaminari, но я не могу понять, что будет искать файл js, так как у меня другое действие на моем контроллер. Я добираюсь до первого маршрута (здесь) и на самом деле получаю результаты от моего контроллера, но когда маршрут идет "/ batale / text / search '? Params...'", я не могу найти фактический файл js, который rails будет искать. Я пытался создать файл js в тех местах, которые, как мне казалось, он будет искать (например, /batale/texts/search.js или /batale/texts/search/search.js), но безуспешно.
Вот некоторые из моих файлов:
# in routes.rb
Rails.application.routes.draw do
devise_for :users, :controllers => {:registrations => "user/registrations"}
get '/batale/texts/search', to: "batale/texts#search"
# I tried this also
# get '/search_batale_texts', to: "batale/texts#search"
namespace :batale do
resources :texts
end
# and other routes...
end
---
# in batale/texts/index.html.erb
<%= render "batale/texts/search_texts" %>
<div id="pagination-itens">
<%= render partial: "batale/texts/list_texts" %>
</div>
---
# in batale/texts/_search_texts.html.erb
<%= form_tag batale_texts_search_path, remote: true, method: :get, id: 'batale_text-search-form' do %>
...all my regular labels and inputs...
<%= button_tag(type: :submit, class: "my-classes...") do %>
search
<% end %>
#nothing special
<%= end %>
---
#in /views/batale/texts/_list_texts.html.erb
<% @batale_texts.each do |batale_text| %>
actually displays the content and stuff
<% end %>
<div id="paginator" align="center"><%= paginate(@batale_texts, remote: true) %></div>
<script>
some little js just to use accordion on the texts
</script>
---
# in /views/batale/texts/index.js.erb
$("#pagination-itens").empty();
$("#pagination-itens").append("<%= escape_javascript render 'batale/texts/list_texts' %>");
$("#paginator").html("<%= escape_javascript(paginate(@batale_texts, remote: true)).to_s %>");
---
#assets/javascripts/batale/texts.js
var init_batale_text_search;
init_batale_text_search = function(){
$('#batale_text-search-form').on("ajax:before", function(event, data, status){
$('#pagination-itens').empty();
$('#batale_text-search-errors').empty();
show_spinner();
});
$('#batale_text-search-form').on("ajax:complete", function(event, data, status){
hide_spinner();
});
$('#batale_text-search-form').on('ajax:success', function(event, data, status){
$('#pagination-itens').html(data);
});
$('#batale_text-search-form').on('ajax:error', function(event, xhr, status, error){
hide_spinner();
$('#pagination-itens').html(" ");
$('#batale_text-search-errors').html("Something went wrong.");
});
}
$(document).ready(function(){
init_batale_text_search();
});
---
# in controllers/batale/texts_controller.rb
class Batale::TextsController < ApplicationController
before_action :set_batale_text, only: [:show, :edit, :update, :destroy]
def index
@batale_texts = Batale::Text.all.page(params[:page]).per(5)
end
def search
@batale_texts = Batale::Text.search(params).page(params[:page]).per(5)
if @batale_texts.count > 0
render partial: "batale/texts/list_texts"
else
render status: :not_found, nothing: true
end
end
#other regular actions...
end