Alphabetize pagination

Note I have not tried anything about my question, nor Googled
anything about it yet, I was just wondering if this was possible, so
if you wanna answer with lmgtfy, rtfm, or anything like that, please
get it out of the way immediately.

I have a simple address book app that I want to sort by last name, and
put each letter on a different page. Can the Paginate Gem be
customized this much, that is, to provide pagination by, let’s say
record.last_name, and instead of page numbers, show A…Z instead?

Not that I know of, or have done… but I haven’t investigated the
possibility.

As an alternative, you could put a series of letter links at the top of
your table (or down a side; images or CSS styled so they look nice)
which filter your records by that letter, and leave the will_paginate
gem as is to paginate the table body using all the filtered entries
returned from the query.

This is for a glossary that I setup …

class Glossary
def self.find_glossaries(options = {})
if options[:category].blank?
paginate :per_page => options[:per_page], :page => options
[:page],
:conditions => [“term LIKE ?”, options[:letter]+"%"], :order
=> “term”
else
end
end
end

Then in the controller
@letter = params[:letter].blank? ?
@category.glossaries.collect.first.term.first.upcase : params[:letter]
@glossaries = @category.glossaries.find_glossaries(:letter =>
@letter, :page => params[:page])

There is more to this but the the important one is the model
find_glossaries

And then this view helper:

def letter_options(category=nil)
if category.nil?
@letter_options_list = Glossary.all.collect!{|c|
c.term.first.upcase }.uniq.sort!
else
@letter_options_list = category.glossaries.collect!{|c|
c.term.first.upcase }.uniq.sort!
end
end

I hope this get you going…

And I also made it all work via ajax using this simple railscast:

Here’s how I implemented something similar.

On the index page of my contacts, I list them alphabetically by
default, paginated with 10 per page. At the top of this index page, I
spit out the alphabet with each letter having it’s own link. Click
any letter and I return all the contacts whose last name starts with
that letter, paginated 10 per page of that letter. I also add some
css styling to the letter they clicked to show which letter they’re
on. Hope that helps.

http://gist.github.com/175741