加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – rails中的字母分页

发布时间:2020-12-17 04:29:50 所属栏目:百科 来源:网络整理
导读:我正在寻找Rails的宝石按字母顺序分页.我希望我能找到结果中找到的第一个字母列表(我的意思是,如果没有以’a’开头的行,我不希望在分页链接上显示’a’).这种宝石已经存在吗? 提前致谢! 解决方法 这根本不容易创建,例如,如果你有一个发现,可能像: @all_wo
我正在寻找Rails的宝石按字母顺序分页.我希望我能找到结果中找到的第一个字母列表(我的意思是,如果没有以’a’开头的行,我不希望在分页链接上显示’a’).这种宝石已经存在吗?

提前致谢!

解决方法

这根本不容易创建,例如,如果你有一个发现,可能像:
@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过滤掉这些独特的字母,并按字母顺序对这些字母进行排序.

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

<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怎么办:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读