В настоящее время вы не можете снова открыть классы Engine, содержащиеся в каталоге /app
движка, просто добавив этот же класс в каталог /app
родительского приложения.Например:
/my_engine/app/controllers/users_controller.rb
/my_app/app/controllers/users_controller.rb
Файл из my_engine
даже не загрузится, если в родительском приложении есть файл с таким же именем.Подробнее здесь:
http://www.cowboycoded.com/2011/02/28/why-you-cant-reopen-rails-3-engine-classes-from-the-parent-app/
Я ищу обходной путь, который позволил бы мне удалить то же имя файла / класса по тому же пути, что и родительское приложение, и открыть заново вместо перезаписи.класс.Может быть, я упускаю что-то очевидное.Я могу сделать эту работу с отдельным файлом (другое имя файла), который использует class_eval, но я не очень доволен этим решением.Есть идеи по поводу элегантного решения для этого?
Мне также интересно, есть ли причина этого ограничения, или это просто результат того, как rails загружает файлы (см. Включенную ссылку), а не преднамеренно.Мне кажется, что изменение поведения двигателей для возможности повторного открытия классов таким способом было бы хорошей особенностью в рельсах.Я знаю, что это сначала смутило меня, и я уверен, что другие разработчики тоже будут бороться с этой проблемой.