The safe navigation operator&. calls a method only when the receiver is not nil. When the receiver is nil, it skips the call and returns nil instead of raising NoMethodError.
Use it where nil is an expected value, such as an optional association or a missing hash entry. Each step of a chain needs its own &.. Avoid long &. chains where nil would mean a bug, because they hide the error until later.
It is not exactly the same as &&. &. checks only for nil, so false&.to_s still calls the method. The && version below also calls user.profile twice.
user&.profile&.name # Returns nil if any part is nil
# Roughly equivalent to:
user && user.profile && user.profile.name
# With arrays
users&.first&.name # Safe even if users is nil
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.