我有一个简单的日志记录应用程序,它包含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中的依赖项,但没有运气。
答案 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