我正在建立一个索引页面,我需要显示具有日期的结果,按时间顺序排序(从最早的日期到最新的日期),但我需要始终默认显示最后一页。
我不能在日期中使用DESC命令,因为它会破坏我需要的所有目的=(。
TL; DR:我需要显示一个分页日志列表,按日期升序排序,但从最后一页开始。这可能与will_paginate一起使用吗?谢谢!
答案 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