Ruby on rails Can';Rails引擎添加的ActionController方法内部的t访问模型
我正在开发一个打包为gem的Rails引擎。在我的引擎的主模块文件中,我有:Ruby on rails Can';Rails引擎添加的ActionController方法内部的t访问模型,ruby-on-rails,ruby,rubygems,rails-engines,Ruby On Rails,Ruby,Rubygems,Rails Engines,我正在开发一个打包为gem的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.
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所做的,因此请让我知道我是否完全错了。使用::AuditorLog访问ActiveRecord类(除非您在模块或命名空间中拥有它,在这种情况下,您需要包括模块名称).哪里定义了
AuditorLog
?当您执行以下操作时,它是否工作:AuditorLog?很好,很简单。谢谢你,杰里米!