【问题标题】:Kaminari and Mongoid 'undefined method page' when model defined in separate gem当模型在单独的 gem 中定义时,Kaminari 和 Mongoid '未定义的方法页面'
【发布时间】:2012-10-05 13:48:12
【问题描述】:

我有一个简单的日志记录应用程序,由 ruby​​ 脚本和一个从 MongoDB 文档读取的“只读”Rails 应用程序组成。为了保持模型的一致性,它们都使用了一个定义了 Mongoid 文档的通用 gem。

我遇到的问题是 gem 中定义的 Mongoid 文档没有得到 Kaminari 装饰。换句话说(尽可能简化)。

# User is a Mongoid document defined in the Rails app (i.e. standard behavior)
require 'kaminari'
class UsersController < ApplicationController
  def index
    User.page(params[:pg]) # works great
  end
end

但是

# SharedLogging::LogEntry is a Mongoid document defined in a separate gem
require 'kaminari'
class LogEntriesController < ApplicationController
  def index
    SharedLogging::LogEntry.page(params[:pg]) # undefined method 'page' for ...
  end
end

我认为解决方案是在 /config/initializers/kaminari_config.rb 中执行某些操作以强制将分页应用于共享模型,但我无法偶然发现正确的解决方案。

或者,我也尝试将 Kaminari 添加为共享 gem 中的依赖项,但没有运气。

【问题讨论】:

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


    【解决方案1】:

    似乎可以使用此处描述的相同解决方案来解决:https://github.com/collectiveidea/delayed_job_mongoid/issues/10

    在我的 kaminari_config.rb 中,我添加了以下几行:

    SharedLogging::LogEntry.send(:include, Kaminari::MongoidExtensions::Document)
    SharedLogging::LogEntry.send(:include, Kaminari::MongoidExtensions::Criteria)
    

    如果我首先应用范围,则需要第一行 SharedLogging::LogEntry.page(params[:pg]) 第二行(例如 SharedLogging::LogEntry.by_date(params[:dt]).page(params[:pg]) )。

    最大的问题是我的 gem 中的每个模型都需要两条线;而且有很多型号。

    【讨论】:

      【解决方案2】:

      与其手动扩展,不如使用 Kaminari 的 hooks 初始化器。我发布的另一个答案中有详细信息:

      undefined method page for #<Array:0xc347540> kaminari "page" error. rails_admin

      【讨论】:

      • 我刚试过这个,但没有运气。一个问题可能是版本。我们仍在使用 Kaminary 0.13,所以该行将是 Kaminari::Hooks.init!(带有爆炸声),也许还有其他问题阻止它工作。另一个问题可能是模型包含的顺序。我将使用初始化程序,看看是否可以在包含模型后获得 init 调用。
      • 加载的订单类肯定有问题。我主要是在 Heroku 上遇到错误,在几次重新启动后,错误最终没有出现(至少到目前为止)。
      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2015-10-22
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多