我正在构建一个索引页面,我需要在其中显示具有日期的结果,按时间顺序排列(从最早的日期到最新的日期),但默认情况下我需要始终显示最后一页。
我不能对日期使用 DESC 顺序,因为它会破坏我需要这个 =(.
TL;DR:我需要显示一个分页日志列表,按日期升序排序,但从最后一页开始。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)
您也可以尝试使用Kaminari gem 来代替 will_paginate,这样会更舒服一些。
这是我最终得到的解决方案:
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 = @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 = 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