【问题标题】:Mongoid paginationMongoid 分页
【发布时间】:2012-01-22 20:53:33
【问题描述】:

我试过了

@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进行分页?

【问题讨论】:

  • 只是使用一些库与 MongoDB 进行分页。您可以使用: gem 'will_paginate' 和 gem "will_paginate_mongoid"

标签: pagination mongoid


【解决方案1】:

为了稍微更新一下答案,现在存在 Pagy gem,它的性能(cpu/mem)也比 will_paginate 和 kaminari 高得多。这是migration guide

【讨论】:

    【解决方案2】:

    几年后发布,以防其他人面临同样的挑战。

    kaminari-mongoid 于 2016 年发布,目前仍在维护中。

    https://github.com/kaminari/kaminari-mongoid

    Kaminiari for Mongoid 的所有优点,包括对 Mongoid::Criteria 结果的适当处理,这可能是 OP 错误的原因。

    【讨论】:

    • 这适用于 Mongoid 7.X 吗?它对我不起作用。总是回复undefined method page
    • 我会迁移到 Pagy gem。 Kaminari 性能和内存。用法比 will_paginate_mongoid 还要差,see here
    【解决方案3】:

    仍然使用 will_paginate 也可以。

    这个帖子有同样的问题:undefined method `paginate' for Array on Rails 3 with mongoid

    修复错误的要点是在控制器调用分页库之前添加这一行:

    require 'will_paginate/array'
    

    如果您在整个项目中使用 mongoid,则应将其添加到默认配置文件中。

    希望解释有帮助。

    来自原始 gem 源的引用:https://github.com/mislav/will_paginate/wiki/Backwards-incompatibility 在“WillPaginate::Collection”部分。

    P/S:如果您的查询不是很大,这只是一种解决方法。如果你想要更好的性能,让我们试试mongoid-pagination gemcustom will_pagination gem 或其他支持 Mongoid 的分页 gem,如 kaminari

    【讨论】:

    • 我认为 will_paginate 的原始版本不支持像 Mongoid 这样的 no-sql 数据库,所以调用这个 gem 的基本核心将通过像普通数组一样考虑数据库记录来解决这个问题,而不是特殊的 sql 数据库格式像 MySQL、SQLite、...
    • 这应该是正确答案,不推荐其他宝石。
    【解决方案4】:

    使用以下宝石。

    很有帮助。

    https://github.com/lucasas/will_paginate_mongoid

    【讨论】:

      【解决方案5】:

      有点晚了,但对于其他人来说,我找到了'will_paginate_mongoid'

      https://github.com/lucasas/will_paginate_mongoid

      真的很直接,让你简单地做

      collection.skip(20).limit(10)
      

      【讨论】:

      • 如果由于某种原因您需要使用will_paginate 并且您运行rails-4will_paginate_mongoid 在我上次检查时不起作用。解决方案是将mongoid_paginator.rb 放入app/models/concerns,删除外部module WillPaginateMongoid,然后在模型类中删除include MongoidPaginator
      • will_paginate_mongoid 看起来不再积极维护了。回购的最后一次提交是Sep 12, 2013
      【解决方案6】:

      愚蠢的事情,但是在我添加了 require 'mongoid-pagination' 之后,它在 sinatra 中对我有用 到 app.rb

      【讨论】:

      • ~ 1 年后,我更喜欢 kaminari
      【解决方案7】:

      这对我来说很好用:

      @posts = Post.paginate(:page => 1, :limit => 10).desc(:_id)
      

      添加了desc(:_id),以便可以首先列出最新帖子。

      【讨论】:

      • 在我将gem 'mongoid-pagination' 添加到我的Gemfile 之后,这对我有用。
      • 该项目的最后一次提交是May 23, 2017
      【解决方案8】:

      你应该使用 Kaminari https://github.com/amatsuda/kaminari

      【讨论】:

      • 我在使用 mongoid 时遇到了同样的错误。没有页面方法。
      • 你在 rails g kaminari:config 之后重启服务器了吗?
      • Kaminari 与 Rails 4.0.0、Mongoid 4.0.0 完美配合。
      • 有一个 will_paginate_mongoid,但你需要 will_paginate 和 will_paginate_mongoid 两者都可以使用。仅使用 kaminari 的简单易用性使其成为上佳选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多