Hey all,

I'm trying to fully understand what this method in Ruby does. Basically
it passes a collection of records from the database (using the Rails
find method) into the argument list as a local variable called
resources. It assigns the local variable to an instance variable called
@all_resources. Then it checks the query string in the url to see if the
limit key has a value and if so grab it(e.g. ?limit=10), otherwise
default to 25. Then it checks the query string for a page key and if
none is there, it defaults to 1 and assigns it to instance variable
@page. Then we subtract 1 from @page, presumably because if we are on
page 1, then 1 -1 = 0, so 0 is assigned to @page_index. This means when
we multiply page_index by 25 (limit), we get 0, and so when we slice the
resources we slice the limit (25) by offset (0), and hence we return the
first 25 records, making sense since we want to display first 35 records
on page 1. However, if $page is equal to 2 and limit 25,  then
page_index is equal to 1, and offset equal to 25. But I dont see how we
are getting the next 25 records on page 2.

I think what's confusing me is this line of code:

((@all_resources.size - 1) / @limit).to_i + 1

What does the size method do and why add one at the end?

Here's the method:

def paginate(resources)
   @all_resources = resources
  @limit = (params[:limit] && params[:limit].to_i) || 25
  @page = (params[:page] && params[:page].to_i) || 1
  @page_index = @page - 1
  @offset = @page_index * @limit
  @num_pages = if @limit == 0
    1
  elsif @all_resources.size == 0
    1
  else
    ((@all_resources.size - 1) / @limit).to_i + 1
  end
  @last_page = @num_pages
  @limit == 0 ? @all_resources : @all_resources.slice(@offset, @limit)
end

Thanks for response

-- 
Posted via http://www.ruby-forum.com/.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to