当模型在单独的gem中定义时,Kaminari和Mongoid'未定义的方法页'

时间:2012-10-05 13:48:13

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

我有一个简单的日志记录应用程序,它包含ruby脚本和一个从MongoDB文档中读取的“只读”Rails应用程序。为了保持模型的一致性,他们都使用了一个共同的宝石,其中定义了Mongoid文档。

我遇到的问题是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中的依赖项,但没有运气。

2 个答案:

答案 0 :(得分:2)

似乎可以使用此处描述的相同解决方案解决: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]))。

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

答案 1 :(得分:0)

而不是手动扩展,使用Kaminari的钩子初始化器。在我发布的另一个答案中有详细信息:

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