Railsでページネーションを実装する(kaminari)

RailsではKaminariというgem を使うと簡単にページネーションが実装できます。
(DBの検索結果から)

Gemfileに gem 'kaminari' を追記して
$ bundle install
これで準備おk。
こんなかんじで使えます。

#検索結果を10件に分割した3ページ目を取得する
@users = User.page(3).per(10)

このpageメソッドとperメソッドは、通常のActiveRecordのクエリメソッドと同じように、モデルのクラスまたはリレーションに対して呼び出し可能で戻り値もリレーションとなるみたいです。

@students = School.first.students.where(:name => "hoge").page(4).order("birthday").per(10).where(:grade => 3)

こんな感じに既存のに組み合わせてつかえます。

でも、ActiveRecordのallとかfindなんかのメソッドを使おうとすると、ただの配列になってしまって,
kaminariのビューヘルパーに渡せなくなってしまいます(´・ω・`)

そんなときも安心!
paginate_arrayメソッドなんてのがありました。
これを駆使すると配列にも適応できます。
つまり検索の時にallやfindも使えます!

自分はユーザに対してのコメントをページネーションさせる為にこんなかんじで使ってます。

@comments = Kaminari.paginate_array(Comment.find_all_by_user_id(params[:id])).page(params[:page]).per(5)

あとはView側で

<%= paginate @comments %>

ページング用のリンクを表示するヘルパーを追記すれば、自動的に最適なページング部品を描画してくれます!

ビューのカスタマイズなんかもできるみたいなんで、今度試してみたいと思います。