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