Ruby On Rails框架下的翻页/排序插件

1. kaminari

官方主页:https://github.com/amatsuda/kaminari

首先在Gemfile文件中加入:gem 'kaminari'

然后通过bundle install命令激活该插件。

演示代码:

home_controller.rb

class HomeController < ApplicationController
  
  def index
    @users = User.order(sort).page(params[:page]).per(20)
    respond_to do |format|
      format.html
      format.js
      format.xml { render :xml => @users }
    end
  end

  private
    def sort
      params[:sort].to_s == '' ? "" : params[:sort] + ' ' + params[:direction]
    end

end
home_helper.rb
module HomeHelper
  
  def sortable(title = nil, column)
    title ||= column.titleize
    direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
    link_to title, params.merge(:sort => column, :direction => direction), :remote => false, :method => :get
  end

  private
    def sort_column
      User.column_names.include?(params[:sort]) ? params[:sort] :  "created"
    end
  
    def sort_direction
      %w[asc desc].include?(params[:direction]) ? params[:direction] : "desc"
    end

end
index.html.erb
<table>
	<tr>
		<th><%= sortable 'Email', 'email' %></th>
		<th><%= sortable 'Password', 'password' %></th>
		<th><%= sortable 'Publisher ID', 'publisher_id' %></th>
	</tr>
	<% @users.each do |user| %>
	<tr>
		<td><%= user.email %></td>
		<td><%= user.password %></td>
		<td><%= user.publisher_id %></td>
	</tr>
	<% end %>
</table>
<%= paginate @users, :remote => false %> 
新建model如下:user.rb

class User < ActiveRecord::Base
end
测试用的数据库中,users表有id, emai, password, publisher_id, created等字段,可自行修改。

注意:

我们可以在通过model中添加paginates_per来设定每页显示的行数,这样在controller里就不需要每次都设定了。

例如:

class User < ActiveRecord::Base
  
  paginates_per 10
  
end
在controller里直接:@users = User.order(sort).page(params[:page])  即可。

如果想要使用Ajax,可以参考这里:https://github.com/amatsuda/kaminari_example/tree/ajax

这里简单叙述一下修改步骤:

1. index.html.erb,home_helper.rb等文件中出现:remote => false的全部修改为:remote => true

2. 需要添加几个文件:

index.js.erb

$('#users').html('<%= escape_javascript render(@users) %>');
$('#paginator').html('<%= escape_javascript(paginate(@users, :remote => true).to_s) %>');
在views目录下新建users文件夹,增加_user.html.erb文件:

<tr>
	<td><%= user.email %></td>
	<td><%= user.password %></td>
	<td><%= user.publisher_id %></td>
</tr>
3. 修改文件:

index.html.erb

<table>
	<thead>
		<tr>
			<th><%= sortable 'Email', 'email' %></th>
			<th><%= sortable 'Password', 'password' %></th>
			<th><%= sortable 'Publisher ID', 'publisher_id' %></th>
		</tr>
	</thead>
	<tbody id="users">
		<%= render @users %>
	<tbody>
</table>
<%= paginate @users, :remote => true %> 
这样翻页的功能就完成了。但是排序还有点问题,因为目前还无法记住上一次排序是按照升序还是降序[可使用session来记录],修改修改home_helper.rb,这里略过。

2. will_paginate

官方主页:https://github.com/mislav/will_paginate/wiki

will_paginate和kaminari非常的相似,这里就简单讲述一下了。

页面 index.html.erb上只需把 <%= paginate @users, :remote => true %> 替换为 <%= will_paginate @users %> 即可。

controller里也只需把

@users = User.order(sort).page(params[:page]).per(10)
替换为:

@users = User.paginate(:page => params[:page], :per_page => 10).order(sort)

其他都可以不更改。

另外,和kaminari一样,我们也可以在model里面定义页面显示的行数:

self.per_page = 10

更多信息可参阅其官方主页。

另外,will_paginate自带很多css可以使用:http://mislav.uniqpath.com/will_paginate/

更多资料:http://railscasts.com/episodes/240-search-sort-paginate-with-ajax?autoplay=true


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值