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 %>
ページング用のリンクを表示するヘルパーを追記すれば、自動的に最適なページング部品を描画してくれます!
ビューのカスタマイズなんかもできるみたいなんで、今度試してみたいと思います。