UPDATE 10/2007: If you're looking to do pagination, the new recommended way is to use the will_paginate plugin.
The new Paginator Gem by Bruce Williams is a much welcomed replacement to the built in Rails pagination mechanism. I've been toying with it now for a few weeks and it works great.
In the spirit of DRY, I've created a global paginator partial to handle paging throughout my application. This partial assumes that you've used the Paginator as per the documentation.
Here's the code for the partial:
<div id="pager"> <span class="current_page"> Page <%= params[:page].blank? ? 1 : params[:page] %> of <%= @pager.number_of_pages%> </span> <span class="page_links"> <% if @page.prev? base_url[:page] = @page.prev.number -%> <%= link_to_remote '<', :update => element_to_update, :url => base_url -%> <% end -%> <% @pager.each do |p| -%> <% if p.number.to_s == params[:page] || (p.number == 1 && params[:page].blank?) -%> <span class="active"><%= p.number%></span> <% else base_url[:page] = p.number -%> <%= link_to_remote p.number, :update => element_to_update, :url => base_url -%> <% end -%> <% end if @page.next base_url[:page] = @page.next.number -%> <%= link_to_remote '>', :update => element_to_update, :url => base_url -%> <% end -%> </span> </div>
To use the partial, simply call render :partial and pass in a base_url parameter containing the base url of the controller and action you want the pagination links to go to. The partial will add the page number to the url accordingly.
<%= render :partial => 'paginator', :locals => {:element_to_update => 'div_id', :base_url => {:controller => 'yourcontroller', :action => 'youraction'}} %>
Here are some sample styles to use with your paginator partial.
/* PAGINATOR */ #pager{ overflow: visible; font-size: 95%; line-height: 1.25; margin: 1em 0 0.75em 0; padding: 2px; float: right; clear: right; } #pager .current_page{ float:left; } #pager .page_links{ float:right; } #pager .page_links a:link, #pager .page_links a:visited{ padding: 2px; border: solid 1px #003399; background: #8CA8E6; color: #FFF; } #pager .page_links a:hover, #pager .page_links a:active{ padding: 2px; border: solid 1px #8CA8E6; background: #003399; text-decoration: none; } #pager .page_links .active{ color: #FFF; padding: 2px; border: solid 1px #8CA8E6; background: #003399; text-decoration: none; }