To clear a misunderstanding:
it's confusing/frustrating when the string key gets modified to a symbol
It wasn't a string to begin with. This is just another syntax for creating symbol keys. Consider:
:'foo-bar'.class # => Symbol
The idea is that sometimes, there can be characters in the symbol that look like something completely different.
For example, the above without quotes would mean "create the literal symbol :foo and from it, subtract the value of the local variable/method invocation result bar". Previously, there was no way to construct such symbols, other than to use String#to_sym. And you have to agree this looks terrible:
{'foo-bar'.to_sym => 42, :this_now_needs_rocket_notation => 'baz'}
Quotes in general don't mean string creation, they mean take as is and/or define boundaries for something. Therefore, they incidentally make a lot of sense for literal string syntax, but this is not their only application.
key: valueis just a shortcut for:key => value, so there is actually no string key in your example –"a": 123becomes:"a" => 123(note the leading:)HashWithIndifferentAccesshas nothing to do with ruby :)