Почему в инициализаторах Rails Engine происходит сбой, когда cache_classes = false?

У меня есть движок, который расширяет классы другого движка в его инициализаторах следующим образом:

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 , когда я пытаюсь вызвать что-то, определенное ProductExtender, например @ product.variations.

Излишне говорить, что ужасно видеть, как все мои тесты проходят, а затем меняют ошибку в разработке. Этого не происходит, когда я устанавливаю cache_classes = true , но это заставляет меня задаться вопросом, делаю ли я то, чего не должен делать.

У меня двоякий вопрос: Почему это происходит , и есть ли лучший способ достичь этой функции расширения / вызова методов для объекта другого приложения?

Всем спасибо!

6
задан joshuarh 2 May 2011 в 00:56
поделиться