For example, consider Ruby would resolve it in the former example, but wouldn't in the latter.
In general, Rails does not emulate the Ruby constant resolution algorithms, but in this case it tries using the following heuristic: to be the only valid options.
Later, when the body of the module definition is interpreted, a new entry is created in the constant table of the module object stored in the constant that may live in any other class or module object.
If there were any, they would have separate entries in their respective constant tables.
Otherwise, it tries again in the next directory of the list.
If the list gets exhausted, $ bin/rails r 'puts Active Support:: Dependencies.autoload_paths' .../app/assets .../app/controllers .../app/helpers .../app/mailers .../app/models .../app/controllers/concerns .../app/models/concerns .../test/mailers/previews keyword because it needs to know if the class or module is going to be created or reopened.If the constant is not defined at that point it is not considered to be a missing constant, autoloading is not triggered. When a qualified constant is missing Rails does not look for it in the parent namespaces.But there is a caveat: When a constant is missing, Rails is unable to tell if the trigger was a relative reference or a qualified one.Said entry associates the name "Colors" to a newly created module object.Furthermore, the interpreter sets the name of the new module object to be the string "Colors".In practice, this works quite well as long as the nesting matches all parent namespaces respectively and the constants that make the rule apply are known at that time. If by chance the top-level provides a solution by ensuring that the constant needed to trigger the heuristic is defined in the conflicting place.When a module acts as a namespace, Rails does not require the application to defines a file for it, a directory matching the namespace is enough.Pay special attention in the previous paragraphs to the distinction between class and module objects, constant names, and value objects associated to them in constant tables.At any given place in the code, let's define Rails autoloading does not emulate this algorithm, but its starting point is the name of the constant to be autoloaded, and the cref. Qualified constants look like this: As you see, this algorithm is simpler than the one for relative constants.Class and module definitions can be nested to create namespaces: does not belong to it.We can see in this example that the name of a class or module that belongs to a certain nesting does not necessarily correlate with the namespaces at the spot.