Ruby / Rails - kaminari undefined方法分页错误

时间:2011-08-02 21:47:17

标签: ruby-on-rails ruby-on-rails-3 pagination kaminari

我不确定我做了什么,但是kaminari已经开始在我的应用程序中表现得很奇怪了。

在我的控制器中:

@producers = Producer.order(:name).page(params[:page])

视图:

<%= paginate @producers %>

结果:

undefined method `num_pages' for #<ActiveRecord::Relation:0x000001026e6308>

如果我在控制器中添加.per:

@producers = Producer.order(:name).page(params[:page]).per(25)

我得到了

undefined local variable or method `per' for #<ActiveRecord::Relation:0x0000010928ef60>

最后,奇怪的是,如果我将.order(:name)移到最后,它就会起作用:

@producers = Producer.page(params[:page]).order(:name)

我猜我安装的其他一些gem有page范围或方法导致问题?

感谢。

4 个答案:

答案 0 :(得分:8)

嗯,刚才想出来了。 我安装了Active Admin。它安装了will_paginate作为依赖项。

Active Admin的最新提交中,will_paginate已替换为kaminari

我更改了我的Gemfile以从github中提取Active Adminwill_paginate已从我的捆绑包中移除,现在一切正常。您可以通过将以下行放入gemfile中来完成此操作:

gem "activeadmin", git: "https://github.com/gregbell/active_admin"

答案 1 :(得分:5)

我遇到了另一个需要will_paginate的gem的问题。该问题已通过此代码段解决,该代码段取自active_admin wiki页面:

if defined?(WillPaginate)
  module WillPaginate
    module ActiveRecord
      module RelationMethods
        def per(value = nil) per_page(value) end
        def total_count() count end
      end
    end
    module CollectionMethods
      alias_method :num_pages, :total_pages
    end
  end
end

将其放入初始化程序中。

答案 2 :(得分:1)

要解决此问题,请添加gem 'kaminari'并删除will_paginate。由于我已经使用will_paginate,我刚刚更新了当前对kaminari的will_paginate调用。它们与实现非常相似,并且很容易改变。

答案 3 :(得分:0)

我尝试了johnnycakes的解决方案,但它一直在仪表板上给我堆栈级别太深的错误(类似于https://github.com/gregbell/active_admin/issues/157

我找到的解决方案是指定此修订:

gem 'activeadmin', :git => 'git://github.com/gregbell/active_admin.git', :ref => '811f286fda3b6dfa91aa'