次のように、イニシャライザで別のエンジンのクラスを拡張するエンジンがあります。
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
これはテスト環境と本番環境で機能しますが、config.cache_classes = false
@ NoMethodError
product.variations などの ProductExtender で定義されたものを呼び出そうとすると、エラーが発生します。
言うまでもなく、すべてのテストに合格したのに、開発中にエラーが発生するのを見るのはゾッとします。を設定すると発生しませんcache_classes = true
が、やってはいけないことをしているのだろうかと思います。
私の質問は 2 つあります。なぜこれが起こっているのですか。また、別のアプリケーションのオブジェクトでメソッドを拡張/呼び出しするこの機能を達成するためのより良い方法はありますか?
皆さんありがとう!