Rails1.x系において、
Railsでページ管理するには、paginateメソッドが使える。
指定したモデルクラスに対し、自動的に件数と、指定した件数分のデータを取得できる。
※Rails2.x系では、標準コンポーネントから外されてしまったので、ページネーションのプラグインを導入する必要がある。
$ ruby scipt/plugin install svn://errtheblog.com/svn/plugins/ classic_pagination
classic_paginationをインストールすれば、1.x系と同等に使える。
classic_paginationプラグイン以外にもpaginating_findなどがある。
paginating_findの使い方は、これからのpaginate。 - 青空を探す、旅の記録。を参照。
具体的なコードは以下。
コントローラで、
@pages,@items = paginate(:items, :conditions => ["created_at < ?", "2009-02-25")], :per_page => 10, :include => "item2", :order => "created_at DESC")
解説
- @pagesの名前は自由だが@pagesが一般的。
- @itemsは検索したいモデルクラスの名前を複数形にするのが一般的。
- 第一引数は対象となるモデルクラスを指定する。
- 第二引数以降はオプション。
- :conditionsは条件、:per_pageは1ページあたりの表示数、:orderは順番、DESCは降順。
- :includeは目的のレコードと関連しているモデルクラスからもデータを読み込むので、データベースへのアクセス回数を減らすことが出来る。
ビューで、
<%= link_to '前のページ ', {:page => @pages.current.previous, :parameter_example => params[:parameter_example]} if @pages.current.previous %> <%= pagination_links(@pages, :window_size => 2, :params => {:parameter_example => params[:parameter_example]}) %> <%= link_to ' 次のページ', {:page => @pages.current.next, :parameter_example => params[:parameter_example]} if @pages.current.next %>
解説
- currentは、現在表示しているページ情報のオブジェクト
- previousは、一つ前のページオブジェクト
- nextは、一つ後のページオブジェクト
- :parameter_exampleは、もし引き継ぎたいデータがある場合、パラメータで引き継ぐ。
- pagination_linksでは、第一引数に受け取った@pages、その次にpagination_linksのオプション、最後にhtmlのオプションを付け加えることができる。
pagination_linksのオプションは以下。
オプション | 説明 | デフォルト値 |
---|---|---|
window_size | 現在のページ番号の前後n個のリンクを表示 | 2 |
always_show_anchors | 常に先頭と最後のページへのリンクを作るか | true |
link_to_current_page | 現在のページをリンクありにするかどうか | false |
params | リンクに対する追加パラメータ | {} |
これで、ページ遷移がうまくいく。
お読み頂きありがとうございます。
少しでもお役に立てたらクリックお願いします↓。