我们知道高版本中的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 Pagination
def paginate(options)
options = options.dup
pagenum = options.fetch(:page) { raise ArgumentError, ":page parameter required" }
per_page = options.delete(:per_page) || self.per_page
total = 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_options
rel.total_entries = total.to_i unless total.blank?
rel
end
end
可是该方法在新rails中不存在了。解决办法是在控制器调用paginate前排序即可:
@orders = Order.order('created_at DESC').paginate(page:params[:page],per_page:10)