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.