我正在使用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>'
我该怎么做才能解决此错误?
答案 0 :(得分:4)
您无法在Array
上调用 Kaminari 方法,因为Rule.all
将返回Array
。
所以你必须做这样的事情:Rule.page(1).per(2)
以下是 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)