ページ切替を使う
1ページ○行としてページごとに表示するためのプラグインがRails2.0の「will_paginate」です。これを入れてみます。
インストール
こちら(→will_paginateのインストール方法が変わっていた - idesaku blog)を参考に入れてみます。
C:\www\2.5-55.jp> gem sources -a http://gems.github.com/ Bulk updating Gem source index for: http://gems.github.com/ Need to update 12 gems from http://gems.rubyforge.org ............ complete http://gems.github.com/ added to sources
C:\www\2.5-55.jp> gem install mislav-will_paginate
Successfully installed mislav-will_paginate-2.3.1
Installing ri documentation for mislav-will_paginate-2.3.1...
Installing RDoc documentation for mislav-will_paginate-2.3.1...
設定
「myapp/config/environment.rb」の最後(endのあと)に次の2行を追加します。
gem 'mislav-will_paginate', '~> 2.2' # → バージョン2.2以降、3未満
require 'will_paginate'
使い方
テストとして、「myapp/app/controllers/items_controller.rb」に indexとは別で listアクションを追加することにします。
class ItemsController < ApplicationController # GET /items # GET /items.xml def index @items = Item.find(:all) respond_to do |format| format.html # index.html.erb format.xml { render :xml => @items } end end def list @items = Item.paginate :page => params[:page], :per_page => 4, :order => 'created_at desc' respond_to do |format| format.html # list.html.erb format.xml { render :xml => @items } end end
この記述で「1ページ当たり4行、created_atフィールドの降順」という指定になります。
実際に使っているのは「myapp/app/views/items/list.html.erb」の中です。
<h1>Listing items</h1> <table> <tr> <th>Itemname</th> <th>Itemcode</th> : : <th>Genreid</th> </tr> <% for item in @items %> <tr> <td><%=h item.itemName %></td> <td><%=h item.itemCode %></td> : : <td><%=h item.genreId %></td> <td><%= link_to 'Show', item %></td> <td><%= link_to 'Edit', edit_item_path(item) %></td> <td><%= link_to 'Destroy', item, :confirm => 'Are you sure?', :method => :delete %></td> </tr> <% end %> </table> <br /> <%= will_paginate @items, :class => 'flickr_pagination' %> <br /> <%= link_to 'New item', new_item_path %>
サンプルでついてきたflickr風のスタイルシートを適用してみました。スタイルシートはWindowsの場合、このあたり(C:\ruby\lib\ruby\gems\1.8\gems\mislav-will_paginate-2.3.1\examples)にあると思いますので、このなかの「pagination.css」を「myapp/public/stylesheets」にコピーします。
で、スタイルシートを読み込んでいる「myapp/app/views/layouts/items.html.erb」に「pagination.css」を追加してあげればOKです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>Items: <%= controller.action_name %></title> <%= stylesheet_link_tag 'scaffold'<span class="lookcolor">,'pagination'</span> %> </head>
主なオプション
使いそうなオプションのみ抜粋。( )内は指定しない場合のデフォルト。
- :class divのclass名を指定する。( "pagination" )
- :prev_label 前ページへのリンクラベル( "≪ Previous")
- :next_label 次ページへのリンクラベル( "Next ≫")
- :inner_window 現在のページの両隣何ページ分表示するか( 4 )
- :outer_window 1ページ目と最後のページからそれぞれ何ページ分表示するか( 1 )
- :separator ページ間のセパレータ( " " )
- :page_links 各ページへのリンクを表示するか( true )。falseだと前後のページのみリンク。
- :container divで囲むか ( true )
- :id divのidを指定( nil )
参考
- ザリガニさん(→AutoPagerizeなwill_paginateにしておく - ザリガニが見ていた...。)にはいつもお世話になっています。
- インストール方法その他については、こちら(→will_paginateのインストール方法が変わっていた - idesaku blog)を参考にさせていただきました。
- 詳しい使い方はこちら(→http://brass.to/blog/will_paginate.html)を参照したほうがいいです。