Rails 2.x 中最常用的分页插件是 will_paginate ,这个相信大家都耳熟能详
不过到 Rails 3 以后,我发现一个更好选择,那就是 Kaminari
我选择它,主要是看中其直观灵活的界面定制功能,它不像 will_paginate 那样需要配置一大堆参数,而是采用 view 文件来进行配置,非常好用

安装

很简单,在 Gemfile 增加一行即可

gem 'kaminari', '~> 0.13.0'

常用法

ActiveRecord

装了插件以后,你可以在 model 对象上使用 .page() 和 .per() 这两个方法,就像 .where() 一样

  • 每页10个,取第2页数据
User.page(2).per(10)
  • 配合查询条件语句,取第三页数据,默认每页为25个
User.where(:status=>1).includes(:topics).page(3)
  • 如果传给 .page() 方法的参数是 nil,则默认为1
User.page(params[:page])

View

在页面上,要显示分页的话,用它提供的 helper 方法即可

<%= paginate @users %>

这样会生成类似 « First ‹ Prev ... 2 3 4 5 6 7 8 9 10 ... Next › Last » 的 html

参数配置

全局参数配置

执行以下命令,会在 config\initializers 下生成一个配置文件 kaminari_config.rb

rails g kaminari:config

这个配置文件控制着 kaminari 的全局设置,有以下参数可以进行自定义

  • default_per_page 缺省情况下的每页个数,默认为25
  • page_method_name 分页方法的名称,如果你怕冲突(比如想很蛋疼地同时使用 will_paginate),可以修改它
  • param_name 分页参数的参数名,默认为 param
  • window / outer_window / left / right 这四个参数都与分页显示有关系,特别是在总页数比较多的时候,该如何显示

Model 配置

如果统一的 per_page 全局设置不能满足你的要求,你希望针对每一种 model 设置不同的 per_page ,那么可以这样

class User < ActiveRecord::Basepaginates_per 50
end

这样就省去你在每个 controller 中各自使用 .per() 方法了

I18N 语言

默认情况下, kaminari 生成的分页组件是这个样子

如果你想简单地修改其中的文字的话,可以通过修改相应的 locales 语言文件来实现
比如我的配置如下

views:pagination:first: "&laquo; 首页"last: "末页 &raquo;"previous: "&laquo; 上一页"next: "下一页 &raquo;"truncate: "..."

分页界面定制

修改默认界面

为了自定义分页的显示样式,首先要生成一些模板文件,执行以下命令

rails g kaminari:views default

这样会创建 app/views/kaminari/ 文件夹,里面的文件就是分页显示所需的 view ,你可以修改它们

  • _paginator.html.erb 这是总的入口文件,可以通过修改它来调整显示的整体结构
    比如我不需要“首页”,”末页“这两个链接,那么我就在这个文件里面将对应的代码删除

  • _page.html.erb 对应页码链接

  • _first_page.html.erb / _last_page.html.erb 对应“首页”和“末页”的链接

  • _prev_page.html.erb / _next_page.html.erb 对应“上一页”和“下一页”的链接

  • _gap.html.erb 空隙的显示,默认是中间的省略号(...)

注意文件不要改名,否则入口文件会找不到对应的子文件,不过如果你入口文件中将某个部分的代码删除的话,那么相应的子文件也可以删掉

theme 功能

以上的方法可以用于修改默认的分页界面,不过如果系统比较复杂,在不同的地方需要显示不同的分页界面该怎么办?
强大的 kaminari 还提供了 theme 的功能,而且实现很简单,你只需要在 app/views/kaminari/ 下再新建子文件夹即可

例如我在 app/views/kaminari 下新建了一个叫做 tiny 的子文件夹,并将外面的文件都拷贝进去
然后在 view 中这样写即可

<%= paginate @blogs, :theme=>'tiny' %>

这时候 kaminari 就会根据 tiny 子文件夹下的 view 来渲染分页界面了

资源

这是 Klog 项目中所自定义的两个分页界面,分别用于前台和后台,供参考
https://github.com/edokeh/klog/tree/master/app/views/kaminari

Klog开发笔记——分页插件 Kaminari 介绍相关推荐

  1. Bootstrap Paginator 分页插件参数介绍及使用

    Bootstrap Paginator是一款基于Bootstrap的js分页插件,功能很丰富,个人觉得这款插件已经无可挑剔了.它提供了一系列的参数用来支持用户的定制,提供了公共的方法可随时获得插件状态 ...

  2. Kinect开发笔记之一Kinect详细介绍

      毕业设计的课题我选择了结合Kinect和Unity3D开发体感游戏,这是我十分感兴趣的一个课题,所以做好当然责无旁贷.准备再写一系列Kinect的学习笔记,记录自己毕设一步一个脚印的历程.     ...

  3. PythonNet开发笔记一、PythonNet介绍及安装

    介绍 Python.NET ( pythonnet) 是一个包,它使 Python 程序员可以与 Windows 上的 .NET 4.0+ 公共语言运行时 (CLR) 和 Linux 和 OSX 上的 ...

  4. 流媒体服务器开发笔记(2)--RTCP协议介绍

    http://blog.sina.com.cn/s/blog_53061af00100o2no.html ----------------------------------------------- ...

  5. 分页插件 - PageHelper的介绍和使用

    PageHelper介绍 PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql. oracle.mariaDB.DB2.SQLite.Hs ...

  6. pagehelper插件oracle,带你学习最简单的分页插件PageHelper

    引言: PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库, 例如mysql. oracle.mariaDB. DB2. SQLite.Hsqldb等. ...

  7. C#开发笔记之15-如何用C#获取某月最大天数?

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#开发笔记之15-如何用C#获取某月最大天数? | .Net中文网. C#开发笔记概述 概述 本文介绍使用C#获取某月最大天数的4种 ...

  8. C#开发笔记之13-如何用C#分隔字符串并返回字符串数组?

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#开发笔记之13-如何用C#分隔字符串并返回字符串数组? | .Net中文网. C#开发笔记概述 概述 本文介绍使用C#分隔字符串并 ...

  9. C#开发笔记之12-如何用C#统计子字符串出现的次数?

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#开发笔记之12-如何用C#统计子字符串出现的次数? | .Net中文网. C#开发笔记概述 概述 本文介绍如何使用C#统计子字符串 ...

  10. MyBatis复习(八):MyBatis 分页插件 PageHelper

    PageHelper是国人开源的一款MyBatis扩展插件,可以帮助完成自动分页功能.PageHelper自动分页插件使用非常简单,如果持久层框架用的是MyBatis,建议使用该分页插件. 引入分页插 ...

最新文章

  1. 安装python模块时,遇到error: Unable to find vcvarsall.bat
  2. tensorflow学习(4.loss函数以及正则化的使用 )
  3. 寄存器(CPU工作原理)04 - 零基础入门学习汇编语言09
  4. 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件 .
  5. 2021年程序员1月薪资大幅度上涨,你的2021有奔头了吗?
  6. 深入互联网广告中的出价模式(中) — 智能出价模式
  7. 超云将成为数据中心演化的下一个阶段
  8. asp.net core 系列之Performance的 Response compression(响应压缩)
  9. 回复邮件时如何不要邮件头_如何为阅读,点击和回复率达到100%的CEO设计一封冷邮件...
  10. 普通笔记本能运行Linux么,Windows ARM 笔记本电脑现在可以运行 Ubuntu
  11. 韩国巨型机器人曝光,走一步地动山摇
  12. 第一次立会(2019.3.24)
  13. PPT中均匀分布各图形(水平或垂直)
  14. oracle的简单命令
  15. 拓端tecdat|R语言基于协方差的SEM结构方程模型中的拟合指数
  16. JAVA构造方法与构造方法的执行原理简单理解(栈与堆)
  17. 如何增加架设传奇服务器,做为一个新手如何架设传奇
  18. Werid Tips
  19. wikisql 数据集解释_【Wikidata】维基数据详解
  20. 瑞萨单片机iap串口升级boot工程的构建-学习记录

热门文章

  1. 基于Echarts实现可视化数据大屏物流云大数据看板页面HTML模板
  2. 小葵花妈妈课堂之Nginx Rewirte
  3. 中国计算机学会青年计算机科技论坛
  4. 用matlab进行多项式通分,Matlab控制系统仿真基础
  5. 透过西安未来人工智能计算中心,看到AI不一样的未来
  6. 微积分:2.1导数中的中值定理
  7. 关于计算机系统的基本组成
  8. html+css+js制作520表白网页,全屏的爱心和表白语网页动画代码,浪漫的520爱心表白动画特效。...
  9. Beyong Compare4过期解决办法
  10. ios 拍照上传到服务器_iOS 上传图片到服务器