【Rails】will_paginateを使って、リストをページ分け!
DBなどから、データをとってきて、単純にeachなどで表示させると、データの羅列が続き…
for文で分けたとしても、ページ分けをいちいち実装するのもなーと(インターン中)思っていたところ、ありました!
will_paginateというライブラリです。
メイン参考サイト
http://maskana.homedns.org/rails/pro/detail/paginate/45
インストール
gem install will_paginate
(インターン中は、ここで will_paginate(<0) というようなエラーが出たので、proxyの設定を事前にした上で(set http_proxy="サーバ名"))
使う前の設定
will_paginateを使いたい、Railsのプロジェクトの、config/environment.rbの一番最後(ループの外)に以下を記述
#最後尾に以下を追記 require 'will_paginate'
使い方
Userから、すべて表示させたい時
controller
@users = User.paginate(:page => params[:page], :order => 'created_at desc', :per_page => 10)
paginate()の()の中に書かれている部分は、findと同じ物が使えます。
そのため、paginate()はfind()と同じだと思って書いても大丈夫そうです。
http://maskana.homedns.org/rails/pro/body/104
コントローラー部分ではfindメソッドの代わりにpagenateメソッドをつかい、page にはparams[:page]を、:per_page には1ページに表示させるレコード数を指定します。また、findメソッドで指定できる:conditions や :order など同じように使用できます。
view
<% @users.each do |user| %> <%= user.user_name %> <% end %>
以下を好きなところに書く事で、好きなところにページ分けの部分を表示できる
<%= will_paginate @users, :prev_label=>'前', :next_label=>'次' %>
prev_labelやnext_labelを利用しなかった場合は、nextといったような、英語表示になります。
will_paginateと書いただけだと、ページ表示させたい中身が見えないので忘れないように(忘れていました…^^;)
まとめ
最低限必要な事は
- ライブラリのインストール
- environment.rbにrequireの記述
- controllerでpaginateを使った、find(?)を行う。変数に保存する
- viewで、eachやforを使って、表示したい中身を表示する
- viewで、ページの部分を表示する
です。
オプションについて
controller部分に追加出来るオプションや、view部分のオプションなどがあります。
以下のサイトで分かりやすくまとめられています。