Javascript 使用kaminari和ajax对搜索结果分页

Javascript 使用kaminari和ajax对搜索结果分页,javascript,ruby-on-rails,ajax,search,kaminari,Javascript,Ruby On Rails,Ajax,Search,Kaminari,我正在使用mongoid和kaminari开发Rails 5应用程序 应用程序本身将承载来自两个不同研究组的多个文本,并为每个文本提供不同的功能。(其中之一就是你会在下面看到的“batale”。) 其中一个功能是搜索文本或文本的某些部分,但这不是问题所在。我已经可以成功搜索并显示结果。问题在于这些结果的分页 当显示索引操作上的所有文本时,我的分页工作正常,我已经在kaminari的文档中复制了index.js.erb解决方案,但我无法确定js文件rails将寻找什么,因为我在控制器上有不同的操作

我正在使用mongoid和kaminari开发Rails 5应用程序

应用程序本身将承载来自两个不同研究组的多个文本,并为每个文本提供不同的功能。(其中之一就是你会在下面看到的“batale”。)

其中一个功能是搜索文本或文本的某些部分,但这不是问题所在。我已经可以成功搜索并显示结果。问题在于这些结果的分页

当显示索引操作上的所有文本时,我的分页工作正常,我已经在kaminari的文档中复制了index.js.erb解决方案,但我无法确定js文件rails将寻找什么,因为我在控制器上有不同的操作。我在第一条路径(下面)上做了一个get-to-a,实际上从我的控制器那里得到了结果,但是随着路径“/batale/text/search”?params…”,我找不到rails要查找的实际js文件。我曾尝试在我认为应该查找的位置(如/batale/text/search.js或/batale/text/search/search.js)上创建一个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
routes.rb中的
#
Rails.application.routes.draw do
为:用户,:控制器=>{:注册=>“用户/注册”}
获取“/batale/text/search”,至:“batale/text#search”
#我也试过这个
#获取“/search_batale_text”,至:“batale/text#search”
名称空间:batale do
资源:文本
结束
#还有其他路线。。。
结束
---
#在batale/text/index.html.erb中
---
#在batale/text/_search_text.html.erb中
…我所有的常规标签和输入。。。
搜索
#没什么特别的
---
#在/views/batale/text/_list_text.html.erb中
实际显示内容和内容
一些小js只是为了在文本上使用手风琴
---
#在/views/batale/text/index.js.erb中
$(“#分页itens”).empty();
$(“#分页itens”)。追加(“”);
$(“#分页器”).html(“”);
---
#assets/javascripts/batale/text.js
var init_batale_text_search;
init_batale_text_search=函数(){
$('#batale_text-search-form')。关于(“ajax:before”,函数(事件、数据、状态){
$(“#分页itens”).empty();
$('#batale_text-search-errors').empty();
显示_微调器();
});
$('#batale_text-search-form')。关于(“ajax:complete”,函数(事件、数据、状态){
隐藏微调器();
});
$('#batale_text-search-form')。on('ajax:success',函数(事件、数据、状态){
$('#分页itens').html(数据);
});
$('#batale_text-search-form')。on('ajax:error',函数(事件、xhr、状态、错误){
隐藏微调器();
$('#分页itens').html(“”);
$('#batale_text-search-errors').html(“出现了问题”);
});
}
$(文档).ready(函数(){
init_batale_text_search();
});
---
#在controllers/batale/text_controller.rb中
类Batale::TextsController0
渲染部分:“batale/texts/list_texts”
其他的
呈现状态::未找到,无:true
结束
结束
#其他常规行动。。。
结束