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.
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
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.