用will_paginate读取数据库内容并实现分页显示

运行环境:ruby2.0  rails4.0.0

设置分页有两种方法,1.在Model中添加self.per_page = 9;2.直接在paginate后面添加:per_page => 10参数,以下是第二种方法:

1.安装will_paginate
  (1)在genfile文件中添加
gem 'will_paginate'
gem 'bootstrap-will_paginate'
然后执行
 $ bundle install

2.改controller
def manage_index
    @user = User.paginate(page: params[:page]))
  end

User.paginate默认分页是30条数据一页,可以加限制,比如说想每页显示10条数据,就可以
def manage_index
    @user = User.paginate(page: params[:page],per_page:10))
  end

执行时生成的SQL语句如下:
SELECT "users".* FROM "users" LIMIT 10 OFFSET 0
3.改对应的视图文件
%tbody
    [email protected] do |t|
      %tr
        %td(align="center" style="width:37%" valign="middle")
          =t.id-1
        %td(align="center" style="width:37%" valign="middle")
          =t.name
        %td(align="center" style="width:45%" valign="middle")
          =link_to '删除' ,:action => "login"
          =link_to '修改密码',:action => "login"
.right-padding
  = will_paginate @user

这样就可以实现分页显示了
will_paginate 方法有点小神奇,在 Users 控制器的视图中,它会自动寻找名为 @users 的对象,然后显示一个分页导航链接。因为我的控制器是User,所以上面代码的@user可以省略。

还可以对要显示的数据库内容进行筛选:比如要要显示除管理员之外的所有用户信息可以这样添加限制
@user = User.paginate(page: params[:page], per_page: 9).where(:admin => 'false')

执行时会生成SQL语句如下:
SELECT "users".* FROM "users" WHERE "users"."admin" = 'false' LIMIT 9 OFFSET 0
这样就把管理员滤掉了

补充:
有时候需要对某些数据进行分页显示,而这些数据不是从数据库直接读取出来的,比如说显示从另一个服务器传过来的数据,这样就不能直接用.paginate
假如@activities是一个对象数组,可以这样做,首先要在需要分页的controller的代码上方引入
require 'will_paginate/array'

然后把@activities存到session里
session[:aa] = @activities

在从session里面读取分页
@aa = session[:aa].paginate(page: params[:page], per_page: 10)

这种方式只适用于记录条数较少的情况下使用。

猜你喜欢

转载自wangsuting.iteye.com/blog/1985129