用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)

這種方式只適用於記錄條數較少的情況下使用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章