如何为Kaminari指定Ajax分页的控制器和动作?

geb*_*011 3 ajax ruby-on-rails-3 kaminari

我正在使用Kaminari宝石作为我的ruby on rails应用程序(对于仍然使用will_paginate的任何人,我建议考虑切换!更清洁,更通用).

我遇到的问题是我想在进行AJAX分页时指定一个控制器动作,即.让我的分页远程工作,如下:

 <%= paginate @feeds, :param_name => :page, :remote => true%>
Run Code Online (Sandbox Code Playgroud)

默认情况下,当我设置:remote => true,并将以下行添加到我的"pages"控制器home.js.erb文件时,它可以在我的主页上工作.我甚至不需要指定哪个js部分引用; 它会自动选择.

  $('.synopsis').html('<%= escape_javascript render('exchanges/synopsis', :feeds => @feeds)%>');
  $('.paginator').html('<%= escape_javascript(paginate(@feeds, :param_name => :page, :remote => true).to_s)%>')
Run Code Online (Sandbox Code Playgroud)

但问题是这个"概要"div是我在我的应用程序中的许多不同页面上呈现的部分.因此,在控制器不是我的"页面"控制器的页面上,远程分页不再起作用.

一种解决方案是将这两行添加到我的许多不同控制器中的js.erb文件中.但那将是多余的和不优雅的.

我希望能够在"paginate"调用中指定哪个控制器以及用于远程调用的操作.然后我想我会写一个动作,如:

 def paginate_remotely
     respond_to paginate_remotely.js
 end
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?这似乎是一个简单的问题,但我无法弄明白.以下肯定不起作用:

 <%= paginate @feed_exchanges, :param_name => :exchange_page, :remote => true, :controller => :exchanges, :action => :paginate_remotely %>
Run Code Online (Sandbox Code Playgroud)

geb*_*011 8

对于那些感兴趣的人,答案是您必须在:params规范下指定控制器和操作,如下所示:

 <%= paginate @feed_exchanges, :params => {:controller => :exchanges, :action => :paginate_remotely}, :param_name => :exchange_page, :remote => true %>
Run Code Online (Sandbox Code Playgroud)

不要忘记在config/routes.rb中编写为此操作定义路由,并创建一个名为paginate_remotely.js.erb的js partial,其中包含:

 $('.synopsis').html('<%= escape_javascript render('exchanges/synopsis', :feeds => @feeds)%>');
 $('.paginator').html('<%= escape_javascript(paginate(@feeds, :param_name => :page, :remote => true).to_s)%>')
Run Code Online (Sandbox Code Playgroud)