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

ruby-on-rails – 与kaminari反向分页?

发布时间:2020-12-17 02:04:01 所属栏目:百科 来源:网络整理
导读:我使用 Kaminari 0.13.0和 RubyOnRails 3.2.8. 让我们假设我的元素有一个默认的crated_at排序,我的列表中有8个元素{a,b,c,d,e,f,g,h},我每页分页3个. 默认情况下,kaminari将创建以下页面链接1,2,3链接到{h,g},{f,d},{c,a}. 如何让kaminari以相反的顺序创建页
我使用 Kaminari 0.13.0和 RubyOnRails 3.2.8.

让我们假设我的元素有一个默认的crated_at排序,我的列表中有8个元素{a,b,c,d,e,f,g,h},我每页分页3个.

默认情况下,kaminari将创建以下页面链接1,2,3链接到{h,g},{f,d},{c,a}.

如何让kaminari以相反的顺序创建页面链接?我希望它以相反的顺序产生链接3,1仍然链接到反向有序元素{h,a}.

关于我试图解决的问题的一点背景:

我通过created_at命令页面上的元素.我希望元素永远保持在同一页面上.如果我不使用反向分页,每次添加新元素时,页面内容都会发生变化.因此,在上面的示例中,如果我向列表{i,j}添加了更多元素,则默认kaminari行为,那么第一页将包含{j,i,而不是{h,g}.第二页将包含{g,e},而不是{f,等等…
这对博彩,搜索引擎优化等不利.

如果我有上面描述的反向页面编号,那么第一页仍然会有{c,a},第3页将使用新元素更新为{i,h,g}并且会有一个新的页面4一个元素{j}.

解决方法

我找到了解决方案:

def index
  users_scope = Users.order(:whateva)
  @users = reverse_paginate(users_scope,params[:page])
end

def reverse_paginate(scope,page)
  if page
    page_number = page
  else 
    page_number = Kaminari.paginate_array(scope.reverse).page(1).per(10).num_pages
  end
  Kaminari.paginate_array(scope.reverse).page(page_number).per(10).reverse!
end

您需要更新kaminari页面视图_page.html.erb并将?page = 1添加到网址:

url = "#{url}?page=1" if page.number == 1
   link_to_unless page.current?,page.number,url,opts = {:remote => remote,:rel => page.next? ? 'next' : page.prev? ? 'prev' : nil}

(编辑:李大同)

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

    推荐文章
      热点阅读