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

joh*_*kes 3 pagination ruby-on-rails ruby-on-rails-3 kaminari

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

在我的控制器中:

@producers = Producer.order(:name).page(params[:page])
Run Code Online (Sandbox Code Playgroud)

视图:

<%= paginate @producers %>
Run Code Online (Sandbox Code Playgroud)

结果是:

undefined method `num_pages' for #<ActiveRecord::Relation:0x000001026e6308>
Run Code Online (Sandbox Code Playgroud)

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

@producers = Producer.order(:name).page(params[:page]).per(25)
Run Code Online (Sandbox Code Playgroud)

我明白了

undefined local variable or method `per' for #<ActiveRecord::Relation:0x0000010928ef60>
Run Code Online (Sandbox Code Playgroud)

最后,奇怪的是,如果我移动.order(:name)到最后,它的工作原理:

@producers = Producer.page(params[:page]).order(:name)
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

joh*_*kes 8

嗯,刚想通了.我安装了Active Admin.它will_paginate作为依赖项安装.

在最新的提交中Active Admin,will_paginate已被替换kaminari.

我改变了我的Gemfile以Active Admin从github 拉出来.will_paginate从我的包中删除,现在一切正常.您可以通过将以下行放入gemfile中来完成此操作:

gem "activeadmin", git: "https://github.com/gregbell/active_admin"
Run Code Online (Sandbox Code Playgroud)


ram*_*igg 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
Run Code Online (Sandbox Code Playgroud)

把它放在初始化器中.