我有一个引擎,它在其初始化程序中扩展另一个引擎的类,如下所示:
module MyApp
class Engine < ::Rails::Engine
initializer 'extend Product' do
AnotherApp::Product.send :include, MyApp::ProductExtender
end
end
end
ProductExtender
模块在包含时调用 AnotherApp::Product 上的一些方法,例如
module ProductExtender
def self.included( model )
model.send :include, MethodsToCall
end
module MethodsToCall
def self.included( m )
m.has_many :variations
end
end
end
这适用于测试和生产环境,但是当我尝试调用 ProductExtender 定义的东西时config.cache_classes = false
,它会向我抛出一个问题,例如 @product.variations。NoMethodError
不用说,看到我所有的测试都通过了,然后又因为开发中的错误而受到猛烈抨击,这令人不寒而栗。当我设置时它不会发生cache_classes = true
,但这让我想知道我是否在做我不应该做的事情。
我的问题是双重的:为什么会发生这种情况,是否有更好的方法来实现在另一个应用程序对象上扩展/调用方法的功能?
谢谢大家!