【问题标题】:rails 3 pagination with kaminari on mongoid embedded documents在 mongoid 嵌入式文档上使用 kaminari 进行 rails 3 分页
【发布时间】:2011-07-21 11:58:26
【问题描述】:

当我在嵌入文档的集合上使用 kaminari 调用 paginate 时,我收到以下错误:

(Access to the collection for Document is not allowed since it is an embedded document, please access a collection from the root document.):

知道如何解决这个问题吗?我已将 kaminari 安装为 gem。

亚历克斯

【问题讨论】:

  • 你有什么mongoid版本?
  • 与嵌入式编程无关。重新标记。

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


【解决方案1】:

您只需要通过父对象访问集合。例如,给定以下模型:

class User
  include Mongoid::Document
  embeds_many :bookmarks
end

class Bookmark
  include Mongoid::Document
  embedded_in :user
end

然后对给定用户的书签进行分页:

@user.bookmarks.page(params[:page])

【讨论】:

  • 我试过了,但它对我不起作用:#:0x10e37fe88> 的未定义局部变量或方法“页面”,我的模型是“文档”嵌入在“项目”
  • 很奇怪。我在我现在正在做的一个项目上对此进行了测试——它确实有效。看起来您可能还有其他问题,因为它似乎在 Class 上调用 Page - 而不是您的收藏集 Criteria
【解决方案2】:

我在 Kaminari 上发现了这个问题:https://github.com/amatsuda/kaminari/issues/89

所以我分叉了它,并按照 spatrik 提供的解决方案对其进行了修复。我不是 100% 确定它适用于所有情况,并且该解决方案没有任何缺点。但目前它的工作方式完全符合预期。

亚历克斯

【讨论】:

    【解决方案3】:

    我刚刚为这个问题发送了一个补丁。看一下请求。希望这有助于解决您的问题。
    https://github.com/amatsuda/kaminari/pull/155/files

    【讨论】:

      【解决方案4】:

      与之前的 theTRON 示例:

      class User
        include Mongoid::Document
        embeds_many :bookmarks
      end
      
      class Bookmark
        include Mongoid::Document
        field :created_at, :type => DateTime
      
        embedded_in :user
      end
      

      以下内容将为您提供您在帖子中描述的错误:

      @user.bookmarks.desc(:created_at).page(params[:page])
      

      虽然下一个可以正常工作:

      @user.bookmarks.page(params[:page]).desc(:created_at)
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        • 2011-08-19
        相关资源
        最近更新 更多