Ruby on Rails将使用ajax进行分页

时间:2012-10-29 12:41:16

标签: ruby-on-rails jquery

我在我的rails应用程序中使用了will_paginate,但是我遇到了一个情况,我需要在一个块中使用will_paginate,当我点击分页号时页面不应该重新加载,任何人都可以帮我说明如何将will_paginate与ajax避免页面重装......?

2 个答案:

答案 0 :(得分:2)

我有一个分页javascript文件

所以在我的index.html.erb文件中添加了

<%=javascript_include_tag "pagination.js"%>

在pagination.js文件中

$(function(){
    $(".pagination a").live("click", function() {
        $.get(this.href, null, null, "script");
        return false;
    });
});

我在索引操作中获取了这样的模型数据。

@employees = Employee.where("!is_deleted=?",1).paginate(:page=>params[:page] ,:per_page => 20)

并将其添加到index.js.erb文件中

$("#employee_table").html("<%= escape_javascript(render("employees")) %>");

这里employee_table是显示数据的div的id。

我在config / initializers中有一个文件名will_paginate_array_fix.rb。
此文件将如下所示

require 'will_paginate/array'

这就是为什么即使我使用它的工作原因,因为它也支持数组。

答案 1 :(得分:1)

以下是我设置的方法:

假设我有一个Item模型。

首先在索引视图中,我渲染一个执行分页的部分:

<div id="list">
 <%= render 'items/paginate_list', :items => @items %>
</div>

在partial中,我在我的will_paginate语句中添加了一个css类:

items/_paginate_list.html.erb
<%=  will_paginate items,  :param_name => :page, :class => 'my_pagination' %>
# code displaying each item...

然后在application.js中,我抓住了点击my_pagination类链接的事件:

$(document).ready(function(){
  $('.my_pagination a').live("click",function(){
    $('.my_pagination').html('Page is loading, please wait...');
    $.get(this.href, null, null, 'script');
    return false;
  });
});

这样通过$.get语句在ajax中对控制器执行调用。分页栏显示正在加载页面的消息。

在控制器中,我只是按照惯例:

class ItemsController < ApplicationController
  def index
    @items=Item.paginate(:page => params[:page], :per_page => 10)
  end
end

最后,在嵌入式js中,我使用分页来提供部分重新加载:

items/index.js.erb
$("#list").html("<%= escape_javascript(render 'items/paginate_list', :items => @items) %>");

希望得到这个帮助。

实际上,它大致是railscast; - )

的快速摘要