Railsエンジンを開発して、宝石としてパッケージ化します。私のエンジンのメインモジュールファイルでは、私は持っています:Railsエンジンによって追加されたActionControllerメソッドの中からモデルにアクセスできない
module Auditor
require 'engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
require 'application_controller'
end
module ActionController
module Auditor
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def is_audited
include ActionController::Auditor::InstanceMethods
before_filter :audit_request
end
end
module InstanceMethods
def audit_request
a = AuditorLog.new
a.save!
end
end
end
end
ActionController::Base.send(:include, ActionController::Auditor)
ここで、AuditorLogはエンジンによっても提供されるモデルです。 (私の意図は、このエンジンを使用するアプリケーションのコントローラにis_auditedを追加して、要求の詳細を監査ログに記録することです)。
このコードがアプリケーションから呼び出されると、エンジンが使用されている場合、AuditorLogモデルにはアクセスできません。
NameError(初期化されていない一定の ActionController ::役:: InstanceMethods :: AuditorLog)
ではなく、私のエンジンからモデル:RubyがそれはActionController内のクラスでなければなりません思うように見えます。
誰でも正しい方向に向けることができますか?これは、エンジンを作り、それを宝石としてパッケージ化しようとした私の初めてのことです。私はこれの例を探し、多くの運がなかった。 ActionControllerクラスにこの機能を追加する私のアプローチは、mobile_fuの機能に基づいていました。
「AuditorLog」はどこに定義されていますか? ':: AuditorLog'を実行すると動作しますか? – apneadiving