我想添加一个过滤器到ApplicationController
,但我想我的宝石之内做到这一点。
我想避免如下:
class ApplicationController < ActionController::Base
include MyGem
end
我不要那个。 我不希望有包括我的源代码模块。
我虽然有问题。
下面是相关的代码:
LIB / CORRELATION_ID / controller_extension
module CorrelationId
module ControllerExtension
def self.included(klass)
klass.class_eval do
after_filter :pass_correlation_id
end
end
def pass_correlation_id
correlation_id = request.headers['Correlation-ID'] || SecureRandom.uuid
headers['Correlation-ID'] = correlation_id
end
end
end
ApplicationController.send :include, CorrelationId::ControllerExtension
LIB / correlation_id.rb
require 'correlation_id/controller_extension'
module CorrelationId
end
现在,当我在我test/dummy
目录,这是对我的宝石测试Rails应用程序,我尝试使用来启动服务器rails s
,我得到以下错误:
/correlation_id/lib/correlation_id/controller_extension.rb:17:in `<top (required)>': uninitialized constant ApplicationController (NameError)
我清楚地具有参考的ApplicationController猴子补丁它的问题。
我将如何管理呢? 我希望我的宝石是自包含的。