Автозагрузка Rails 3 с моделями во вложенных модулях

#ruby-on-rails #ruby #ruby-on-rails-3

#ruby-on-rails #ruby #ruby-on-rails-3

Вопрос:

Мы находимся в процессе внесения существенных изменений в базу данных нашего приложения Rails. Чтобы иметь возможность взаимодействовать с существующим кодом, я планирую выполнить всю работу в пространствах имен модулей, чтобы отделить их от существующих моделей. Тем не менее, я сталкиваюсь с проблемами автоматической загрузки Rails.

Моя файловая структура похожа:

 app/
  models/
    entity/
      new_thing.rb
    old_thing.rb
  

Где new_think.rb содержит что-то вроде

 module Entity
  class NewThing
  end
end
  

и old_thing.rb содержит что-то вроде

 class OldThing
end
  

OldThing автозагрузка выполняется нормально, но я продолжаю получать подобные ошибки:

 Expected app/models/entity/new_thing.rb to define NewThing
  

Есть ли способ заставить его правильно ожидать определения entity / new_thing.rb Entity::NewThing ?

Комментарии:

1. Попробуйте добавить модуль вне каталога сущностей, для которого требуется все внутри соответствующего каталога. Другой способ — создать класс, представляющий суперкласс новых сущностей. Обычно я делаю это второе для пространства имен api v1, используя класс V1::Controller; в качестве имени классов.

Ответ №1:

Попробуйте:

В вашем old_thing.rb

 class OldThing
  Extend Entity
end
  

или

 class OldThing
  require "entity/new_thing"
end