・#254 Pagination with Kaminari - RailsCasts
・ASCIIcasts - “Episode 254 - Kaminariでページ分割”
を見て、以前から気になっていた kaminari を試してみました。
試した結果は、こちら。
ちなみに
mislav/will_paginate - GitHubは
現行バージョンはRails 3をサポートしていません
と紹介されていますが、これは当時の情報で
現在は、サポートされています。
なので、無理にkaminariに移行する必要はありませんが
kaminariの方がカスタムページを作成しやすかったり、will_paginateより利点がありそうです。
will_paginateだと、カスタム用クラスを作成して
ごちゃごちゃやる必要(一例)があったりしますが
kaminariだと、
$ rails g kaminari:views default
でerbを直接修正できるようです。
また、ajaxの対応が簡単後述)だったり
autopagerizeも対応可能だそうです。
移行方法
割と簡単です。すぐできます。
view
# before will_paginate # after paginate
model/controller
# before paginate(:page => page, :per_page => per_page) # after page(page).per(per_page)
他
will_paginateには next_page というメソッドが用意されていましたが
kaminari では、これに変わるものとして num_pages が利用できます。
# before <% if tag_cloud.next_page %> # after <% if tag_cloud.num_pages > 1 %>
ajax
view
paginateの引数 remote を設定してやります。xhrで通信されます。
<%= paginate projects_list, :remote => true %>
controller
respond_to にjsを追加。
respond_to do |format| format.html format.js if request.xhr? end
js.erbを追加
下記のように、jqueryで更新処理を書きます。
$("#project_list").html("<%= escape_javascript(render :partial => 'shared/projects_list',:object => @projects) %>");
追記
kaminari の paginate_array が便利 - それはBlog
paginate_arrayで配列そのものも扱えるようです。(要はfind(:all)の結果が扱えると)