rails中weill_paginate的paginate方法中不能使用额外参数的解决办法

    我们知道高版本中的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)

时间: 2024-09-18 14:07:52

rails中weill_paginate的paginate方法中不能使用额外参数的解决办法的相关文章

android-Android中怎么把一个方法中的值传递到另一个方法中

问题描述 Android中怎么把一个方法中的值传递到另一个方法中 如下 public final Handler viewHandler = new Handler() {...........................};假设这里面有一个值要传递到 public void initViews() { .'''''''''''}:这里面 请大神指教 解决方案 为你想传入的那个方法添加传入数据类型的参数,然后在后一个方法中处理传入的数据,调用此方法的时候就可以传值了 public void

net framework-ADO.NET中如何使用AddWithValue方法给用户自定义类型的参数赋值?

问题描述 ADO.NET中如何使用AddWithValue方法给用户自定义类型的参数赋值? 我在sql数据库中注册了程序集并创建了别名为Vector3的自定义的类型,在类库文件中类型名是SqlVector3.已经能够在表和存储结构中使用这个自定义类型. 但我在C#代码中使用AddWithValue方法给一个存储过程的Vector3类型的参数赋值时,却出现了"ArgumentException: The parameter data type of Assets.MyScripts.SqlVect

对象-java源码中一个抽象类初始化方法中包含一个super(),该怎么理解

问题描述 java源码中一个抽象类初始化方法中包含一个super(),该怎么理解 package org.apache.http.params; import java.util.Set; /** * Abstract base class for parameter collections. * Type specific setters and getters are mapped to the abstract, * generic getters and setters. * * @si

PHP中ID设置自增后不连续的原因分析及解决办法_php实例

PHP中ID设置自增后不连续的原因分析如下所述: alter table tablename drop column id; alter table tablename add id mediumint(8) not null primary key auto_increment first; 每次删除把这两行家伙加上就行了 还有就是这个 使用mysqli对象中的query()方法每次调用只能执行一条SQL命令. 如果需要一次执行多条SQL命令,就必须使用mysqli对象中的 multi_que

关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法_javascript技巧

前端JS中使用XMLHttpRequest 2上传图片到服务器,PC端和大部分手机上都正常,但在少部分安卓手机上上传失败,服务器上查看图片,显示字节数为0.下面是上传图片的核心代码: HTML <input type="file" id="choose" capture="camera" accept="image/*"> JavaScript var filechooser = document.getEleme

PHP中ID设置自增后不连续的原因分析及解决办法

PHP中ID设置自增后不连续的原因分析如下所述: alter table tablename drop column id; alter table tablename add id mediumint(8) not null primary key auto_increment first; 每次删除把这两行家伙加上就行了 还有就是这个 使用mysqli对象中的query()方法每次调用只能执行一条SQL命令. 如果需要一次执行多条SQL命令,就必须使用mysqli对象中的 multi_que

在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法_jquery

easyUI是jquery的一个插件,是民间的插件.easyUI使用起来很方便,里面有网页制作的最重要的三大方块:javascript代码.html代码和Css样式.我们在导入easyUI库后,可以直接复制粘贴里面的代码,从而简单轻便地初步设置网页. 首先导入easyUI函数库: <link rel="stylesheet" type="text/css" href="easyui/themes/default/easyui.css">

我的Android进阶之旅------&amp;gt;android中service的onStartCommand()方法中intent为null的问题

       今天在维护公司的一个APP的时候,突然爆了空指针异常, Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.getBooleanExtra(java.lang.String, boolean)' on a null object reference        下面是报错的log. D/AndroidRuntime(

AjaxPro.net中的服务器端Ajax方法中不能使用 GDI+ 创建图片吗?

问题描述 在Ajax方法中加入下面的代码,方法返回字符串时在客户端收到null值,页面引入了以下名字空间:usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSystem.Drawing.Drawing2D;Ajax方法也用了如下特征修饰:[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]//创建验证码//建立位图对象BitmapnewBitmap=newBi