我们知道高版本中的rails中的分页功能已经放在will_paginate这个gem中,我们在控制器方法中往往需要调用其paginate方法来实现分页数据集控制,举个例子:正常的情况我们想要每页显示10条记录可以这么写:
Item.paginate(page:params[:page],per_page:10)
但是我们又想要降序排列记录呢?书上给出的例子如下:
Item.paginate(page:params[:page],per_page:10,order:'created_at DESC')
可惜该方法在新的rails中已不能使用!通过查看will_paginate的源代码可以看到,原因是如果paginate的调用包含其他参数的话,会调用Active_Record::Relation中的实例方法apply_finder_options:
module Paginationdef paginate(options)options = options.duppagenum = options.fetch(:page) { raise ArgumentError, ":page parameter required" }per_page = options.delete(:per_page) || self.per_pagetotal = options.delete(:total_entries)count_options = options.delete(:count)options.delete(:page)rel = limit(per_page.to_i).page(pagenum)puts "#{'*'*100}:#{rel}\#"rel = rel.apply_finder_options(options) if options.any?rel.wp_count_options = count_options if count_optionsrel.total_entries = total.to_i unless total.blank?relend
end
可是该方法在新rails中不存在了。解决办法是在控制器调用paginate前排序即可:
@orders = Order.order('created_at DESC').paginate(page:params[:page],per_page:10)