読者です 読者をやめる 読者になる 読者になる

【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部分のオプションなどがあります。
以下のサイトで分かりやすくまとめられています。