Проблема в том, что ваше пространство имен / путь к классу не соответствует тому, как автозагрузка Rails работает из коробки.
Когда вы используете класс, который ранее не был объявлен,Rails по умолчанию будет искать определенные пути (определенные для config.autoload_paths
)
- app / controllers
- app / controllers / Concers
- app / models
- приложение / модели / проблемы
- ...
Когда вы используете User
в первый раз, так как он еще не определен (пока), он будет проходить по этим путями попробуйте запросить app / controllers / user.rb, app / controllers / Concers / user.rb, app / models / user.rb, пока он не найдет User
class
, если ваш класс находится в пространстве имен какLegacy :: Export, затем он будет искать app / models / legacy / export.rb, app / models / беспокойства / legacy / export.rb, app / controllers / legacy / export.rb и т. Д.
Вот почему он не может найти ваш класс: ваш файл находится на app/lib
, это не входит в пути, которые Rails использует для поиска.
Есть разныерешения:
Опция # 1
Требуется файл явно.(Рубиновый путь)
require_relative '../../app/lib/legacy/export'
Опция # 2
Добавить app/lib
к autoload_path
(в config/application.rb
) (Rails Way)
module YourApp
class Application < Rails::Application
# ...
config.autoload_paths << Rails.root.join("app/lib")
end
end
Параметр # 3
Адаптировать пространство имен для соответствия ожидаемым автозагрузке (вместо изменения конфигурации)
Пример: переместить файл в нечто вроде app/models/legacy/export.rb