Rails的分頁實(shí)在是簡單到了極點(diǎn)。一個文章列表的分頁是這樣實(shí)現(xiàn)的。
先在Action使用paginate方法,如下。
其中得到的數(shù)據(jù)記錄會在@articles變量里,頁的信息在@article_pages變量里。
paginate方法的第一參數(shù)是數(shù)據(jù)表名,order_by根據(jù)id排倒序,conditions是查詢條件,per_page是每頁三條記錄。
@article_pages,@articles = paginate(:articles,
:order_by => 'id DESC',
:conditions => "user_id=" + user_id,
:per_page => 3)
接著在頁面里就可以把@articles變量里的記錄顯示出來,而在*.rhtml文件里顯示分頁的那一欄的代碼為
<%= pagination_links(@article_pages)%>
缺點(diǎn)是分頁欄的式樣固定,只列出了頁碼,沒有列出上一頁、下一頁這樣的翻頁的按鈕。不過,研究一下pagination_links方法的源代碼,自己仿造寫一個應(yīng)該很簡單。
---------------------------------
今天還碰到一個問題,我把表titles改名為modules后,模型文件名為module.rb,其他部份也做了修改。運(yùn)行后出了錯,出錯信息是Module.class沒有find方法(我在action調(diào)用find方法)。如下:
NoMethodError in SiteController#index
undefined method `find' for Module:Class
RAILS_ROOT: ./script/../config/..
Application Trace | Framework Trace | Full Trace
#{RAILS_ROOT}/app/controllers/site_controller.rb:21:in `header'
#{RAILS_ROOT}/app/controllers/site_controller.rb:5:in `index'
-e:4:in `load'
-e:4
多方嘗試后發(fā)現(xiàn)數(shù)據(jù)庫模型類不允許起名為module(這應(yīng)該是rails內(nèi)部的一個類,或者是rails是一個關(guān)鍵字),最后的解決辦法是加一個下劃線后綴,然后用set_table_name指定映射的表名。文件名:module_.rb
class Module_ < ActiveRecord::Base
set_table_name "modules"
end