1

我有一个简单的日志应用程序,由 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 中的依赖项,但没有运气。

4

2 回答 2

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])),则如果我执行第二行,则需要第一行。

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

于 2012-10-05T15:31:37.620 回答
0

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

#<Array:0xc347540> kaminari "page" 错误的未定义方法页面。rails_admin

于 2012-12-17T08:24:01.427 回答