Rails學習筆記(7)實現(xiàn)分頁,及數(shù)據(jù)庫模型命名限制
Rails的分頁實在是簡單到了極點。一個文章列表的分頁是這樣實現(xiàn)的。
先在Action使用paginate方法,如下。
其中得到的數(shù)據(jù)記錄會在@articles變量里,頁的信息在@article_pages變量里。
paginate方法的第一參數(shù)是數(shù)據(jù)表名,order_by根據(jù)id排倒序,conditions是查詢條件,per_page是每頁三條記錄。
接著在頁面里就可以把@articles變量里的記錄顯示出來,而在*.rhtml文件里顯示分頁的那一欄的代碼為
缺點是分頁欄的式樣固定,只列出了頁碼,沒有列出上一頁、下一頁這樣的翻頁的按鈕。不過,研究一下pagination_links方法的源代碼,自己仿造寫一個應該很簡單。
---------------------------------
今天還碰到一個問題,我把表titles改名為modules后,模型文件名為module.rb,其他部份也做了修改。運行后出了錯,出錯信息是Module.class沒有find方法(我在action調(diào)用find方法)。如下:
多方嘗試后發(fā)現(xiàn)數(shù)據(jù)庫模型類不允許起名為module(這應該是rails內(nèi)部的一個類,或者是rails是一個關鍵字),最后的解決辦法是加一個下劃線后綴,然后用set_table_name指定映射的表名。文件名:module_.rb
先在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)
: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調(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
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(這應該是rails內(nèi)部的一個類,或者是rails是一個關鍵字),最后的解決辦法是加一個下劃線后綴,然后用set_table_name指定映射的表名。文件名:module_.rb
class Module_ < ActiveRecord::Base
set_table_name "modules"
end
set_table_name "modules"
end
posted on 2007-05-08 22:09 陳剛 閱讀(1492) 評論(0) 編輯 收藏 所屬分類: Rails&Ruby