Да, вы можете определить класс ActiveRecord в модуле. Самый простой способ - использовать генератор:
./script/rails generate model logic/phase_logic
./script/rails generate model logic/evaluation_logic
Обратите внимание, что Rails создаст дополнительно файл с определением модуля. В этом случае:
# app/models/logic.rb
module Logic
...
end
# app/models/logic/phase_logics.rb
class Logic::PhaseLogic < ActiveRecord::Base
...
end
# app/models/logic/evaluation_logics.rb
class Logic::EvaluationLogic < ActiveRecord::Base
...
end
Ваши проблемы с константами, определенными в модуле, были вызваны тем фактом, что вы определили константы в модуле определения, «обернутые» вокруг только одной модели из двух созданных вами. Очень важная часть в понимании ruby (и Rails) - , особенно для людей, имеющих большой опыт работы с компилируемыми языками - это помнить, что нет фазы компиляции , поэтому определение Класс читается и выполняется только тогда, когда этот конкретный класс используется. Иногда в неделю после запуска сервера приложений и обслуживания тысяч запросов.
Таким образом, как я уже сказал в ответе на предыдущий вопрос , проблема с автозагрузкой заключалась в том, что иногда определение констант читалось после определения, которое пыталось использовать их. Порядок был случайным - если первым использованным объектом оказался EvaluationLogic, то возникла ошибка. Если первым объектом оказался PhaseLogic, все было хорошо.
Теперь, когда у вас есть файл для самого модуля и определяют константы в этом файле (app/models/logic.rb
), автозагрузка сможет найти и выполнить определения до того, как какой-либо класс начнет их использовать. , Я надеюсь, что все будет хорошо.