A symbol is an immutable name written with a leading colon, like :status. Every use of the same symbol refers to the same object in memory.
Ruby stores each symbol once and represents it internally by an integer ID. That saves memory and makes comparing two symbols fast, because Ruby only checks identity.
Use symbols for hash keys, method names and fixed labels such as :active or :pending. Use strings for text that changes or comes from users. Without the frozen_string_literal magic comment, two identical string literals are two separate objects, so the second comparison below is false.
:status.object_id == :status.object_id # true
"status".object_id == "status".object_id # false
# Common usage
user = { name: "John", age: 30 } # symbols as hash keys
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.