Я разрабатываю движок 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 становится недоступной. Похоже, Руби считает, что это должен быть класс в ActionController:
NameError (неинициализированная константа
ActionController :: Аудиторская :: InstanceMethods :: AuditorLog)
, а не модель из моего двигателя.
Может ли кто-нибудь указать мне правильное направление? Я впервые создаю движок и пытаюсь упаковать его как драгоценный камень; Я искал примеры этого и не очень повезло. Мой подход к добавлению этой возможности в класс ActionController был основан на том, что делает mobile_fu, поэтому, пожалуйста, дайте мне знать, если я все об этом не так.