The problem is loading the rails development mode code: in general, the code is loaded when you try to do something with a constant (for example, a subclass of it) and this constant does not exist. This leads to a call to const_missing , and the rails use it to try to load the class (see the manual for a detailed description).
If neither ApplicationController nor Admin :: ApplicationController exist, then when you access your controller pages, the ruby ββwill hit this const_missing and try to load admin / application_controller.rb
However, if the ApplicationController is already loaded, then ruby ββwill not run const_missing , since it is completely legal for a class in the admin module to inherit something at the level.
The decision, as you say, should make explicit what you inherit. Personally, in my own applications, I use Admin::BaseController as a base class.
source share