A symbol is an immutable name that Ruby stores only once, while a string is mutable text, and each "name" literal creates a new object. So every :name in a program is the same object.
That makes symbols a good fit for hash keys and other identifiers:
They save memory, because every use of a key shares one object.
Comparing two symbols only checks that they are the same object, which is faster than comparing strings character by character.
They cannot change, so a key cannot be modified by accident.
# Symbol - same object_id
:name.object_id == :name.object_id # true
# String - different objects
"name".object_id == "name".object_id # false
Rails uses symbols for option keys, like validates :email, presence: true. Request params accept both kinds of key, so params[:id] and params["id"] return the same value.
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.