1

ruby スクリプトと、MongoDB ドキュメントから読み取る「読み取り専用」の Rails アプリケーションで構成される単純なロギング アプリケーションがあります。モデルの一貫性を保つために、両方とも Mongoid ドキュメントが定義されている共通の gem を使用します。

私が抱えている問題は、gem で定義されている Mongoid ドキュメントがカミナリ装飾を取得していないことです。言い換えれば(可能な限り単純化されています)。

# 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 で何かをして、ページネーションを共有モデルに強制的に適用することだと思いますが、正しい解決策に出くわすことができませんでした。

別の方法として、共有 gem の依存関係として Kaminari を追加しようとしましたが、うまくいきませんでした。

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])最初にスコープを適用する場合に 2 番目の行を実行する場合は、最初の行が必要です(例: SharedLogging::LogEntry.by_date(params[:dt]).page(params[:pg]))。

最大の問題は、gem の各モデルに両方の行が必要なことです。そしてたくさんのモデルがあります。

于 2012-10-05T15:31:37.620 に答える
0

手動で拡張するのではなく、Kaminari のフック初期化子を使用します。私が投稿した別の回答に詳細があります:

#<Array:0xc347540> カミナリ「ページ」エラーの未定義のメソッド ページ。rails_admin

于 2012-12-17T08:24:01.427 に答える