作者giive (lala)
看板Ruby
标题Pagination :让分页不再繁琐
时间Wed Nov 8 22:51:36 2006
http://lightyror.blogspot.com/2006/11/pagination.html
Ruby on Rails 其中一个特色,就是把 Web Programming 里面繁琐的细节,用优美简单的语法来修饰。所以,通常你不需要花太多时间在细节上面,而是可以直接往 business logic 进攻。什麽是繁琐的细节呢?分页就是典型的例子。
什麽是分页呢?举 Google 为例子,
约有70,200,000项符合rails的查询结果,以下是第 21-30项。
页数检索: 上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页
这些就是分页,商业逻辑超级简单,但是出现频率也超级高,繁琐到不能再繁琐的东西。这个时候 Rails用 Paginaton 来解救苦难的同胞啦。Pagination 顾名思义,Google 字典是这样解释的
pagination: 分页; 标记页数
不过一直到今天,我才知道分页的英文(汗)。果然学 Ruby on Rails 让我英文进步不少(尤其是一些单复数的英文),可以考虑当作一个学 Rails 的优点 XD 。他是一个 Build in 的功能,所以他整合的很好,我们从 controller level 跟 action level 来看。
Action Level:
单一个 action 才会使用到的分页,使用方式如这
def list
@person_pages, @people =
paginate :people
end
他 会都会去 people 资料库捞全部的资料,然後将取出来的值放在 @people 这个变数里面,另外他会写入分页档案到 @person_pages 这个变数里面,至於现在的页数他会放到 params[:page] 这个变数里面。至於排序,限制一页有几个资料等等的问题,他都有选项可以设定,请看Pagination手册。
Controller Level :
代表全部的 action 都要分页
class PersonController < ApplicationController
paginate :people
end
他会每个 action 都会去作刚刚的事情。每一个 action 都会去 people 资料库捞全部的资料,然後将取出来的值放在 @people 这个变数里面,另外他会写入分页档案到 @person_pages 这个变数里面,至於现在的页数他会放到 params[:page] 这个变数里面。
View 写法:
写好 controller 当然要开始进入重点了,View 要怎麽用?我们看看刚刚指定完成的变数, @people ,跟 @person_pages 。首先,@people 代表的是 Model Object 的 array ,使用方式大家很清楚。但是 @person_pages 代表的是分页这个 Object ,这就有点意思了,我们来看看怎麽用。
所有的数量: @person_pages.item_count
目前这一页的第一个序号: @person_pages.current.first_item
目前这一页的最後一个序号:@person_pages.current.last_item
上一页: link_to(h('< page =""> @person_pages.current.previous}) if @person_pages.current.previous
下一页:link_to(h('Next >'), {:page => @person_pages.current.next}) if @person_pages.current.next
页数列表(就是 1 2 3 4 5 6):pagination_links(@person_pages)
简单吧!!! Pagination 使用就是那麽简单,而且可以帮你简单的避开繁琐的分页,真是很实用的东西。
--
lighty RoR 是一个介绍 lighttpd , SQLite , Ruby and Rails 的 Blog
http://lightyror.blogspot.com/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.101.150
1F:→ contagious:pagination 是好用,可是资料太多的时候要小心效能问题 11/09 01:07
2F:推 PsMonkey:不过就是效能... 没关系啦... 11/09 01:35
※ 编辑: giive 来自: 61.230.100.157 (11/09 09:07)
3F:推 wawawa:二楼感觉蛮没礼貌的...这里是ruby版吧?有需要这样嘛? 11/09 09:06
4F:推 PsMonkey:这个说法是我在 Ruby 版看来的... 11/09 10:47
5F:推 godfat:不过效能的影响力会一年比一年弱倒是真的。虽然同时 11/09 13:50
6F:→ godfat:我们的要求也一年比一年高 -_-b 11/09 13:50