You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails使用will_paginate报(given 2, expected 1)错误如何解决

报错指向视图中will_paginate @articles, :container => false这行代码,你给will_paginate方法传了2个参数(分页集合@articles、配置项:container => false),但当前项目中生效的will_paginate方法只接受1个入参,所以触发参数错误。

错误原因
  • 最常见的场景是Gemfile中同时引入了will_paginate和kaminari两个分页插件,两者的helper方法存在命名冲突:kaminari内置的will_paginate兼容方法仅支持1个集合参数,不接收额外配置项,会覆盖will_paginate原生的方法实现。
  • 第二种可能是项目内自定义了will_paginate helper方法(通常在app/helpers目录下的文件中定义),重写了插件的原生实现,且自定义方法仅声明了1个入参。
  • 第三种为使用的will_paginate版本过旧,旧版本不支持传入额外配置参数。
对应解决方案
  • 优先检查Gemfile是否同时存在kaminari和will_paginate:
    • 若无需同时使用,删除不需要的分页插件对应的gem条目,执行bundle install后重启服务即可。
    • 若必须同时使用两个插件,可在config/initializers目录下新建kaminari_config.rb配置文件,添加以下代码修改kaminari的方法名避免冲突:
      Kaminari.configure do |config|
        config.page_method_name = :kaminari_page
        config.param_name = :kaminari_page
      end
      
      配置完成后重启服务即可。
  • 若不存在多插件冲突,全局搜索项目代码中是否有自定义的will_paginate方法定义,删除自定义方法或修改方法定义支持接收可变参数即可。
  • 若为版本过旧问题,将Gemfile中will_paginate的版本指定为最新稳定版:
    gem 'will_paginate', '~> 4.0'
    
    执行bundle update will_paginate后重启服务即可。

额外优化提示

你的控制器index方法中@articles = Article.all为冗余代码,会被下一行的paginate查询结果直接覆盖,可以直接删除。

内容的提问来源于stack exchange,提问作者Murat Çiçek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:54:01