設置分頁有兩種方法,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)
這種方式只適用於記錄條數較少的情況下使用。