Usage examples

Use a paginate finder in the controller:

@posts = Post.paginate :page => params[:page]

or even something more complex:

@posts = Post.paginate_by_board_id @board.id, :page => params[:page],
           :order => 'updated_at DESC'

Yeah, paginate works just like find — it just doesn‘t fetch all the records. Don‘t forget to tell it which page you want, or it will complain!

Render the posts in your view like you would normally do. When you need to render pagination, just stick this in:

<%= will_paginate @posts %>

You‘re done. But how does it know how much items to fetch per page? It asks your model by calling its per_page class method. You can define it like this:

class Post < ActiveRecord::Base
  cattr_reader :per_page
  @@per_page = 50
end

… or like this:

class Post < ActiveRecord::Base
  def self.per_page
    50
  end
end

… or don‘t worry about it at all. Will Paginate defines it to be 30 by default. But you can always specify the count explicitly when calling paginate:

@posts = Post.paginate :page => params[:page], :per_page => 50

The paginate finder wraps the original finder and returns your resultset that now has some new properties. You can use the collection as you would with any ActiveRecord resultset. Will Paginate view helpers also need that object to be able to render pagination:

<ol>
  <% for post in @posts -%>
    <li>Render `post` in some nice way.</li>
  <% end -%>
</ol>

<p>Now let's render us some pagination!</p>
<%= will_paginate @posts %>
Last edited by mislav, about 1 month ago
Versions: