久保清隆のブログ

ライフハック、健康、旅行など、役立つ情報を書きます。

Railsでページ管理するためのメソッドの使い方

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 リンクに対する追加パラメータ {}


これで、ページ遷移がうまくいく。



お読み頂きありがとうございます。
少しでもお役に立てたらクリックお願いします↓。
ブログランキング・にほんブログ村へにほんブログ村 IT技術ブログへにほんブログ村 IT技術ブログ プログラム・プログラマへ