У меня есть движок, который расширяет классы другого движка в его инициализаторах следующим образом:
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
, но это заставляет меня задаться вопросом, делаю ли я то, чего не должен делать.
У меня двоякий вопрос: Почему это происходит , и есть ли лучший способ достичь этой функции расширения / вызова методов для объекта другого приложения?
Всем спасибо!