在Rails中按字母顺序分页[英] alphabetical pagination in rails

本文是小编为大家收集整理的关于在Rails中按字母顺序分页的处理方法,想解了在Rails中按字母顺序分页的问题怎么解决?在Rails中按字母顺序分页问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在为 Rails 寻找按字母分页的 gem.我希望我可以在结果中找到第一个字母的列表(我的意思是,如果没有以"a"开头的行,我不希望在分页链接上显示"a").这种宝石已经存在了吗?

提前致谢!

推荐答案

这根本不会太难创建,例如如果你有一个 find,可能像这样:

@all_words = Word.select("words.word")

...它返回一个结果集,例如这样的单词列表:

["alphabet", "boy", "day", "donkey", "ruby", "rails", "iPad"]    

……你可以这样做:

@all_words.collect {|word| word[0,1]}.uniq.sort

会返回:

["a", "b", "d", "r", "i"]

.collect {|word| word[0,1]} 将每个单词的第一个字母存储到一个新数组中,而 uniq 过滤掉唯一的字母,sort 按字母顺序排序.

只需将其分配给一个变量,您就可以在视图中使用它,如下所示:

<ul>
<% @first_letters.each do |letter| %>
    <%= content_tag :li, link_to(letter, words_pagination_url(letter), :title => "Pagination by letter: #{letter}") %>
<% end %>
</ul>

如果传入的参数,您的控制器操作可以决定如何处理分页中的参数:

def index
    if params[:letter]
        @words = Word.by_letter(params[:letter])
    else
        @words = Word.all
    end
end

然后您的模型中的范围将类似于:

scope :by_letter,
        lambda { |letter| {
            :conditions => ["words.word LIKE ?", "#{letter}%"]
        }}

您的路线需要类似:

match "words(/:letter)" => "words#index", :as => words_pagination

我还没有完全测试过这个,但它应该会让你走上正确的道路.

本文地址:https://www.itbaoku.cn/post/786712.html