4

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

我不能对日期使用 DESC 顺序,因为它会破坏我需要这个 =(.

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

4

4 回答 4

3

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

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

您也可以尝试使用Kaminari gem 来代替 will_paginate,这样会更舒服一些。

于 2012-09-05T23:40:01.960 回答
1

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

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方法两次,但是嘿它有效。如果您尝试直接访问一个页面,它会照常呈现,但如果您不指定页面,则默认情况下会将您带到最后一页。

于 2012-09-06T13:20:46.793 回答
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
于 2016-10-02T11:17:42.913 回答
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
于 2013-11-10T02:22:33.720 回答