宝石としてパッケージ化するRailsエンジンを開発しています。私のエンジンのメインモジュールファイルには、次のものがあります。
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モデルにアクセスできないことです。RubyはそれがActionControllerのクラスであるべきだと考えているようです。
NameError(初期化されていない定数ActionController :: Auditor :: InstanceMethods :: AuditorLog)
私のエンジンのモデルではなく。
誰かが私を正しい方向に向けることができますか?エンジンを作成し、それをgemとしてパッケージ化するのはこれが初めてです。私はこの例を探しましたが、あまり運がありませんでした。この機能をActionControllerクラスに追加するための私のアプローチは、mobile_fuの機能に基づいていたので、これがすべて間違っている場合はお知らせください。