paginate collection bug

Hello,

I was looking to do pagination for collection and I found this bunch
of code.

def paginate_collection(collection, options = {})
    default_options = {:per_page => 5, :page => 1}
    options = default_options.merge(options)

    pages = Paginator.new self, collection.size, options[:per_page],
options[:page]
    first = pages.current.offset
    last = [first + options[:per_page], collection.size].min
    slice = collection[first...last]
    return [pages, slice]
end

@country = WorkInCountry.find(params[:id])
@emp = @country.employees
@country_pages, @countries = paginate_collection @emp, :per_page => 5

in the view, it will display all the output and the number of pages,
once you click on next page, it will display the same thing as the
first page and so on.

any idea on how to fix this error.

Regards

Hello,

I was looking to do pagination for collection and I found this bunch
of code.

def paginate_collection(collection, options = {})
   default_options = {:per_page => 5, :page => 1}
   options = default_options.merge(options)

   pages = Paginator.new self, collection.size, options[:per_page],
options[:page]
   first = pages.current.offset
   last = [first + options[:per_page], collection.size].min
   slice = collection[first...last]
   return [pages, slice]
end

@country = WorkInCountry.find(params[:id])
@emp = @country.employees
@country_pages, @countries = paginate_collection @emp, :per_page => 5

in the view, it will display all the output and the number of pages,
once you click on next page, it will display the same thing as the
first page and so on.

You need to tell it what page to display (ie, pass in :page => 5 to
show the fifth page)

Fred.

Well, I did try passing the page number and yet the problem is the
same.
I found this snap of code in different place and the same problem
appears

def paginate_collection(coll, options = {})
     # Grab params and fix em up
     per = options[:per_page].to_i
     page = (params[:page] || 1).to_i
     offset = (page - 1) * per

     # Create a Paginator based on the collection data
     pages = Paginator.new self, coll.size, per, page

     # Grab the sub-set of the collection
     paged = coll[offset..(offset + per - 1)]

     return [pages, paged]
  end

@country = WorkInCountry.find(params[:id])
@emp = @country.employees
@country_pages, @countries = paginate_collection @emp, :per_page => 5

is there another function built in rails that does the job?
Thanks a lot

Hi,

copy the below statement in paginate_collection method
..................................................................
@page = params[:country_pages]
......................................................................
copy the below code in your view and run it. it will definitely work..
............................................................................................................................
<%= "Page: " + pagination_links(@country_pages, :params => { :action
=> params["action"] || "index" }) + "<hr />" if @pages.page_count >
1%>

<%= link_to 'Previous page', { :page =>
@country_pages.current.previous } if @country_pages.current.previous
%>
<%= link_to 'Next page', { :page => @country_pages.current.next } if
@country_pages.current.next %>
....................................................................................................

You can pass the page number to the method on the controller side like
this:

@foo_pages, @foos = paginate_collection @bar.foos, :per_page =>
3, :page => params[:page]

A little bit more typing but it works.

Greetings,
Chris