Visit http://cardboardrocket.com/pages/paginating_find for more documentation. This plugin makes it easy to page through your model instances by enhancing the default ActiveRecord::Base#find method. In general, you can expect pagination to work with the standard #find options, including :conditions, :group, :order, :limit, and :include. To activate paging, just specify the :page option. You may also provide additional paging options that will control the behavior of the enumerator returned by the #find method. The following options are supported: :size => Number of records in each page of results. Defaults to the total record count or 10, whichever is smaller. :current => The current page. Optional, defaults to the first page: 1. :first => The first page. Optional, defaults to the current page. :auto => Automatically load the next page during invocation of #each. Defaults to false. :count => Number of records used to determine #page_count. Specifying this option prevents the plugin from running a count query, which may be helpful if the table to be queried is very large. Note: if :page is specified, then the :offset option is not supported and an Exception to that effect will be raised. Some handy methods you can call on the result returned by #find, when paging is enabled: #each => Iterate over the results #size => Number of records on all pages combined (total size) #page_size => Number of records on each page #page_count => Number of pages #empty? => Are there any results? #to_a => Create an array of the records on the current page, or all pages if :auto => true #move!(num) => Move to a specific page number #page_exists?(num) => Does this page number exist? #first_page! => Move to the first page #first_page => Page number of the first page #last_page! => Move to the last page #last_page => Page number of the last page #next_page? => Is there another page available? #next_page! => Move to the next page, if one exists #next_page => Page number of the next page #previous_page? => Does a previous page exist? #previous_page! => Move to the previous page, if one exists #previous_page => Page number of the previous pages #first_item => The index of the first item on the page #last_item => The index of the last item on the page #load_page => Reload the current page - Simple Example ------------------------------------------------------- # Get the first page of 'new' Cogs. Each page contains # 10 cogs, and no more than 100 cogs will be returned. cogs = Cog.find(:all, :page, :conditions => ["category = 'new'"], :limit => 100) # Print the name of each cog on the 1st page. Calling #each # more than once will cause the 1st page to be printed for # each invocation. cogs.each { |cog| puts cog.name } # The next_page! method must be used to move to the 2nd page. cogs.next_page! # Print the name of each cog on the 2nd page cogs.each { |cog| puts cog.name } - Scope Example ------------------------------------------------------- # Get the second page of 'new' Cogs, using the #with_scope method. # Each page contains 15 cogs, and no more than 100 cogs will be returned. Cog.with_scope(:find => {:conditions => "category = 'new'", :include => :widget}) do cogs = Cog.find(:all, :limit => 100, :page => { :start => 1, :current => 2, :size => 15 }) end # Print the name of each cog on the 2nd page. cogs.each { |cog| puts cog.name } # Move to the 3rd page of cogs. The options specified by # with_scope apply, even though a new page is loaded outside # the with_scope block. cogs.next_page! ... more examples soon.