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