will_paginate
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 "« Prev", :page => @entries.previous_page %> <%- end -%> <%- if @entries.next_page -%> <%= link_to "Next »", :page => @entries.next_page %> <%- end -%>