snippets.dzone.com/posts/show/389
Sometimes it's nearly impossible to paginate a result set using the built-in :limit and :offset parameters of find(:all). Instead, you can fetch a complicated query and paginate the results afterward.
Add the following to application.rb:
Call it from within your action like this:
Sometimes it's nearly impossible to paginate a result set using the built-in :limit and :offset parameters of find(:all). Instead, you can fetch a complicated query and paginate the results afterward.
Add the following to application.rb:
ruby 代码
- def paginate_collection(collection, options = {})
- default_options = {:per_page => 10, :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
Call it from within your action like this:
ruby 代码
- @pages, @users = paginate_collection User.find_custom_query, :page => @params[:page]