解决方法
这根本不容易创建,例如,如果你有一个发现,可能像:
@H_404_8@@all_words = Word.select("words.word")
…返回一个结果集的结果,如这样的单词列表:
@H_404_8@["alphabet","boy","day","donkey","ruby","rails","iPad"]……你可以这样做:
@H_404_8@@all_words.collect {|word| word[0,1]}.uniq.sort会返回:
@H_404_8@["a","b","d","r","i"].collect {| word | word [0,1]}将每个单词的第一个字母存储到一个新数组中,而uniq过滤掉这些独特的字母,并按字母顺序对这些字母进行排序.
只需将其分配给变量,您就可以在视图中使用它,如下所示:
@H_404_8@<ul> <% @first_letters.each do |letter| %> <%= content_tag :li,link_to(letter,words_pagination_url(letter),:title => "Pagination by letter: #{letter}") %> <% end %> </ul>然后你的控制器动作可以决定如果传入一个paramination中的param怎么办:
@H_404_8@def index if params[:letter] @words = Word.by_letter(params[:letter]) else @words = Word.all end end然后,模型中的范围看起来像:
@H_404_8@scope :by_letter,lambda { |letter| { :conditions => ["words.word LIKE ?","#{letter}%"] }}您的路线需要以下内容:
@H_404_8@match "words(/:letter)" => "words#index",:as => words_pagination我没有完全测试过,但它应该让你走上正确的道路.