Rails的分頁實在是簡單到了極點。一個文章列表的分頁是這樣實現的。
先在Action使用paginate方法,如下。
其中得到的數據記錄會在@articles變量里,頁的信息在@article_pages變量里。
paginate方法的第一參數是數據表名,order_by根據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)%>
缺點是分頁欄的式樣固定,只列出了頁碼,沒有列出上一頁、下一頁這樣的翻頁的按鈕。不過,研究一下pagination_links方法的源代碼,自己仿造寫一個應該很簡單。
---------------------------------
今天還碰到一個問題,我把表titles改名為modules后,模型文件名為module.rb,其他部份也做了修改。運行后出了錯,出錯信息是Module.class沒有find方法(我在action調用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
多方嘗試后發現數據庫模型類不允許起名為module(這應該是rails內部的一個類,或者是rails是一個關鍵字),最后的解決辦法是加一個下劃線后綴,然后用set_table_name指定映射的表名。文件名:module_.rb
class Module_ < ActiveRecord::Base
set_table_name "modules"
end