Also, known as
scope resolution operator.
When we work with namespace it's very common to override some objects, etc that we already have. This could cause us headaches when we try to access a specific object and that object has the same name as our namespace. To have a clearer idea, let's review the next example, imagine that we have the next nested modules:
module FHIR module Services module Appointment def appointment @appointment ||= Appointment.find(id) end end end end
If you do
Appointment.find(id) you will get an error similar to this:
NoMethodError: undefined method 'find' for FHIR::Services::Appointment:Module.
That ^ is because the
Appointment is doing reference to the namespace
FHIR::Services::Appointment (local scope) instead of the
Appointment model (global scope).
constant resolution operator will help us to resolve this. If you put:
This will work because is referencing the global namespace which is the Appointment model this way you can access directly to the model instead of the current namespace.