will_paginate

will_paginate プラグインのメモ。

プラグインについて

ページングを簡単に行う事ができます。

インストール

通常のプラグインと同じです。

ruby script/plugin install svn://errtheblog.com/svn/plugins/will_paginate

基本的な使い方

通常の AR で使う find のように指定するだけ。
例えば、 Entry モデルを取得するサンプル。

@entries = Entry.paginate(:page => params[:page],
                          :per_page => 10,
                          :order => "entries.created_at DESC")

以上、 :page オプションは必須、 :per_page は省略した場合30件ずつ。他のオプションについては、 :conditions, :order, :include は普通に使えました。後は使っていないので、申し訳ないですが不明です。

ビューの対応

ビュー側では、デフォルトで用意された will_paginate というヘルパメソッドが使えます。

<%= will_paginate @entries %>

標準の CSS と組み合わせるとまあまあ見られる程度に仕上がります。これで満足いかない場合は、下記を参考に自分で作る事になります。

使えるメソッド

以下、 will_paginate で拡張されたメソッド群。

current_page
現在のページを取得
previous_page
前のページを取得、存在しない場合 nil を返す。
next_page
次のページを取得、存在しない場合 nil を返す。
page_count
総ページ数をカウントして返す。
out_of_bounds?
総ページ数以上が指定された場合、 true を返す(存在しないページが指定された場合用)。
offset
現在何件目のデータ(ページ数でなく、データ数)を表示しているかのオフセット。
total_entries
総データ数、これもページ数ではなくデータ数。
これらを使って、自分の表示したいように組み立てる事が可能です。
サンプルとして、前後のページへのリンクを作ります。

<%- if @entries.previous_page -%>
  <%= link_to "&laquo; Prev", :page => @entries.previous_page %>
<%- end -%>
<%- if @entries.next_page -%>
  <%= link_to "Next &raquo;", :page => @entries.next_page %>
<%- end -%>