我试过
@posts = Post.page(params[:page]).per_page(10)
和
@posts = Post.paginate(:page => 1, :per_page => 10)
但两种方法都不起作用
undefined method `page' for Post:Class
undefined method `paginate' for Post:Class
你如何与mongoid分页?
答案 0 :(得分:10)
你应该使用Kaminari https://github.com/amatsuda/kaminari
答案 1 :(得分:4)
这对我来说很好用:
@posts = Post.paginate(:page => 1, :limit => 10).desc(:_id)
添加了 desc(:_id)
,以便可以先列出最新的帖子。
答案 2 :(得分:4)
仍然使用will_paginate也没关系。
此主题有同样的问题:undefined method `paginate' for Array on Rails 3 with mongoid
修复错误的要点是在控制器调用paginate库之前添加此行:
require 'will_paginate/array'
如果对整个项目使用mongoid,则应将其添加到默认配置文件中。
希望解释有用。
来自origin gem source的引用:https://github.com/mislav/will_paginate/wiki/Backwards-incompatibility位于“WillPaginate :: Collection”部分。
P / S:如果您的查询不是很大,这只是一个解决方法。如果您想获得更好的效果,请试试mongoid-pagination gem,custom will_pagination gem或其他支持Mongoid的分页宝石,例如kaminari。
答案 3 :(得分:2)
有点晚了,但对于其他人来说,我发现'will_paginate_mongoid'
https://github.com/lucasas/will_paginate_mongoid
非常直接,让你简单地做
collection.skip(20).limit(10)
答案 4 :(得分:1)
答案 5 :(得分:1)
答案 6 :(得分:0)
几年后发布,以防其他人面临同样的挑战。
kaminari-mongoid
于2016年发布,目前正在维护。
https://github.com/kaminari/kaminari-mongoid
Kaminiari对Mongoid的所有善意,包括对Mongoid::Criteria
结果的适当处理,这可能是导致OP错误的原因。
答案 7 :(得分:0)
为更新答案,现在存在Pagy gem,它的性能(cpu / mem)也比will_paginate和kaminari高得多。这是migration guide