未定义的#<array:0xc347540> kaminari“page”错误的方法页面。 rails_admin </数组:0xc347540>

时间:2012-05-21 15:35:59

标签: ruby-on-rails ruby-on-rails-3 mongoid kaminari rails-admin

我正在使用rails_admin。当我去某些资源。通过typin url

localhost:3000/admin/rule 

比它给我这个错误。代码是:

scope = Rule.all
scope.page(1).per(2)

。上面的代码在rails_admin gem.in中写入一个名为mongoid.rb的文件放在adapter文件夹中。完整的日志是:

NoMethodError (undefined method `page' for #<Array:0xcea7408>):
mongoid (2.4.8) lib/mongoid/criteria.rb:385:in  `method_missing'
/home/usman/.rvm/gems/ruby-1.9.2-p290@system/bundler/gems/kaminari-809105ad782a/lib/kaminari/models/mongoid_extension.rb:11:in `page'
/home/usman/.rvm/gems/ruby-1.9.2-p290@system/bundler/gems/rails_admin-069819944cc9/lib/rails_admin/adapters/mongoid.rb:37:in `all'
/home/usman/.rvm/gems/ruby-1.9.2-p290@system/bundler/gems/rails_admin-069819944cc9/app/controllers/rails_admin/main_controller.rb:127:in `get_collection'
/home/usman/.rvm/gems/ruby-1.9.2-p290@system/bundler/gems/rails_admin-069819944cc9/app/controllers/rails_admin/main_controller.rb:39:in `list_entries'
/home/usman/.rvm/gems/ruby-1.9.2-p290@system/bundler/gems/rails_admin-069819944cc9/lib/rails_admin/config/actions/index.rb:30:in `block (2 levels) in <class:Index>'

我该怎么做才能解决此错误?

4 个答案:

答案 0 :(得分:4)

您无法在Array上调用 Kaminari 方法,因为Rule.all将返回Array

所以你必须做这样的事情:Rule.page(1).per(2)

以下是 Kaminari 用法的文档和示例:

https://github.com/amatsuda/kaminari

答案 1 :(得分:4)

我一直在使用Mongoid来解决这个问题一段时间。有时在RailsAdmin中刷新页面会修复它。

我发现问题是Kaminari的钩子没有在我的环境中初始化,所以依赖于Kaminari扩展方法的模型没有它们可用。

我只是从Kaminari's railtie中取出以下一行并将其放在rails_admin initializer的顶部:

Kaminari::Hooks.init

现在事情似乎对我有用了。但是,我不知道为什么ActiveSupport回调没有运行该代码。

答案 2 :(得分:3)

使用此

Kaminari.paginate_array(Rule.all).page(params[:page])

答案 3 :(得分:0)

Kader的解决方案很棒!唯一的问题是我发现我必须添加.per才能使其正常工作。

Kaminari.paginate_array(Rule.all).page(params[:page]).per(PER_PAGE_RECORDS)