will_paginate默认显示最后一页(按时间顺序排列)

时间:2012-09-05 23:31:42

标签: ruby-on-rails ruby ruby-on-rails-3.1 will-paginate

我正在建立一个索引页面,我需要显示具有日期的结果,按时间顺序排序(从最早的日期到最新的日期),但我需要始终默认显示最后一页。

我不能在日期中使用DESC命令,因为它会破坏我需要的所有目的=(。

TL; DR:我需要显示一个分页日志列表,按日期升序排序,但从最后一页开始。这可能与will_paginate一起使用吗?谢谢!

4 个答案:

答案 0 :(得分:3)

您可以构建查询,获取第一遍的总页数,然后在下一次传递中获取最后一页。

query = Log.some_scope
total_pages = query.paginate(:page => 1).total_pages
@logs = query.paginate(:page => total_pages)

你也可以尝试使用Kaminari gem而不是will_paginate,这会让你感觉更舒服。

答案 1 :(得分:1)

试试这段代码:

if params[:page]
    @collection = @q.result(distinct: true).paginate(:page => params[:page], :per_page => 30)
session[:lastpage] = params[:page]
else
    @collection = @q.result(distinct: true).paginate(:page => session[:lastpage] = params[:page], :per_page => 30)
end

答案 2 :(得分:0)

这是我最终到达的解决方案:

if params[:page]
    @collection = @q.result(distinct: true).paginate(:page => params[:page], :per_page => 30)
else
    last_page = @q.result(distinct: true).paginate(:page => params[:page], :per_page => 30).total_pages
    @collection = @q.result(distinct: true).paginate(:page => last_page, :per_page => 30)
end

这不是花哨,它需要一些重构,也许可以使用memoization来避免两次调用paginate方法,但是嘿它有效。如果您尝试直接访问页面,它将照常渲染,但如果您不指定页面,则默认情况下将转到最后一页。

答案 3 :(得分:0)

if params[:page]
    @collection = ordered_query_results.paginate(page: params[:page], per_page: PER_PAGE)
else
    total_results = ordered_query_results.count
    last_page = total_results / PER_PAGE + (total_results % PER_PAGE == 0 ? 0 : 1)
    @collection = ordered_query_results.paginate(page: last_page, per_page: PER_PAGE)
end