2006年01月03日Action Pack Paginationまとめ
■ [Rails][ActionPack][Paginate]paginateまとめ 
基本書式
class PersonController < ApplicationController def list @person_pages, @people = paginate :people, :order => 'last_name, first_name' end end
ActionController::Pagination#pagenateによる戻り値はActionController::Pagination::PaginatorとActionRecordの配列。
ActionController::Pagination::Paginatorについては後述→#paginator?
Options
:singular_name, :class_name
単一形→複数形の推測が出来ないモデルの場合にそれぞれの名前を指定する。
:per_page
単一ページでの最大表示件数。デフォルト10。
:conditions
ActiveRecord#find(:all)に対するWHERE条件設定。
:order
ActiveRecord#find(:all)に対するORDER BY設定。
:joins
ActiveRecord#find(:all)に対するJOIN設定。
:include
ActiveRecord#find(:all)に対するeager loading?設定。
■ [Rails][ActionController][Pagenate]Paginatorまとめ 
基本書式
<%= link_to 'First page', { :page => @person_pages.first } unless @person_pages.current.first? %> <%= link_to 'Previous page', { :page => @person_pages.current.previous } if @person_pages.current.previous %> <%= link_to 'Next page', { :page => @person_pages.current.next } if @person_pages.current.next %> <%= link_to 'Last page', { :page => @person_pages.last } unless @person_pages.current.last? %>
プロパティ
current, current_page
現在表示しているページ
first, first_page
最初のページ
last, last_page
最後のページ
length, page_count
ページ数
has_page_number?
■ [ToDo][Rails][ActionController][Pagenate]Pageまとめ 
基本的なプロパティについてはそのままなので、名前だけ列挙。
- first?
- first_item
- last?
- last_item
- next
- previous
- offset
Windowとは?
ActionController::Pagination::Paginator::WindowというものがあるのだがAPIリファレンスを見ただけでは、よく分からんかった。
結局は「現在10ページ目として前後2ページずつのリンクを表示する」みたいな処理をする際に、
<% for p in @todo_item_pages.current.window.pages %> <%= link_to "P.#{p.number}", { :page => p } %> <% end %>
と書いておくと、
P.8 P.9 P.10 P.11 P.12
みたいな表示をしてくれる…ようなもの。もちろんlink_toの効果でリンクもついている。
デフォルト値は前後2ページとされています。
この値の名前がpaddingとなっている。
ちなみにfirstとlastでそのwindowの前後も取得できるわけですが。
■ [ActionView][Helpers][Pagination]PaginationHelper 
ここまで書いてきた内容をすべて吹っ飛ばしてくれるHelper orz
<%=pagination_links @person_pages%>
これで
1 ... 5 6 7 8 9 ... 14
とか表示されます。
オプション各種
:name
通常リンク先には/controller_name/method_name?page=1みたいな感じになるけど、pageの部分を任意の名前に置き換える。
でも勿論、受け皿を用意しないといけないので、面倒。
:window_size
カレントページの前後何ページで表示するか。
デフォルトは前後2。
:always_show_anchors
最初と最後のページを常に表示するか。
デフォルトはtrue(だから↑の例では1と14が出ている)。
:link_to_current_page
デフォルトはfalse。
:params
内部的にはlink_toをしているのでlink_toへのパラメータはこれで渡す。
pagination_links_each
<% pagination_links_each(@person_pages,{}) do |p| %> <%= p %> <% end %>
Great Job!
http://loyno.edu/~klmyers/poker/baccarat-1.html | http://loyno.edu/~sonier/online/blackjack-1.html | http://loyno.edu/~sonier/online/texas-holdem-4.html | http://www.asbestosandyou.com.au/catalog/work/new/keno-3.html |
Nice site!
<a href=http://medlem.spray.se/casinolibre/gamble-1.html>gambling online</a> tap discard
<a href=http://casino-online1.freecities.com/casino-descargas-2.html>casinos descargas portales web</a> earn
<a href=http://web.hpt.jp/onlinecasino/roulette-1.html>roulette table</a> roulette royal
<a href=http://www.aldeamix.com/argentina/fcngrtones/free-ringtones-2.html>free verizon cell phone ringtones</a> soft