1

我正在使用 rails_admin。当我去某个资源时。通过输入网址

localhost:3000/admin/rule 

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

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

. 上面的代码写在 rails_admin gem.in 一个名为 mongoid.rb 的文件中,该文件位于 adapters 文件夹中。完整的日志是:

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

4 回答 4

4

我一直在使用 Mongoid 时断时续地遇到这个问题。有时在 RailsAdmin 中刷新页面会修复它。

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

我只是从Kaminari 的 railtie中取出以下行并将其放在我的rails_admin 初始化程序的顶部:

Kaminari::Hooks.init

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

于 2012-12-10T10:34:03.647 回答
4

你不能调用Kaminari方法Array,因为Rule.all会返回Array

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

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

https://github.com/amatsuda/kaminari

于 2012-05-21T16:48:41.527 回答
3

用这个

Kaminari.paginate_array(Rule.all).page(params[:page])
于 2012-09-27T13:55:59.467 回答
0

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

Kaminari.paginate_array(Rule.all).page(params[:page]).per(PER_PAGE_RECORDS)
于 2015-03-14T23:15:56.300 回答