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

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

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

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

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

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

您也可以尝试使用Kaminarigem代替will_paginate,这样可以让您感觉更舒服。

试试这段代码:

 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 

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

 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方法,但是嘿它有效。 如果您尝试直接访问页面,它将照常渲染,但如果您未指定页面,则默认情况下将转到最后一页。

 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