:colon and colon: are both symbols in Ruby, a type of data (like strings, integers, etc).
As this Stack Exchange answer says, symbols are immutable. The link explains it better than I would so I'll leave that for them.
In the context of Ruby and Rails, you won't have to know too much besides some syntax rules:
# in a hash:my_hash={:cool=>:symbol}# is the same as...my_hash={cool: :symbol}
In previous versions of Ruby, the rocket or arrow syntax was the only way to have a symbol key point to a symbol value. Now, you can do a short-hand version using the after colon syntax colon:.
One thing to note is that if you ever want a hash with a key that is a string, you have to use the arrow/rocket syntax:
# this will workmy_hash={"cool"=>:thing}#=> {"cool" => :thing }# this will not workmy_hash={"cool"::thing}#=> { :cool => :thing }# converts the string "cool" to a symbol
actually, this works just fine: {"symbol-key-with-dash": :cool}. its that you can write a Symbol literal with quotes: :"looks-weird-still-is-symbol"
as a newcomer, my first "whoa" effect was when i realized that every function call like render :show, status: :created, location: @user is ultimately translated to: render(:show, {:status => :created, :location => @user});. it's just that in ruby you don't have to specify that curly braces to make the last argument a Hash. ruby is implicit. you can omit the brackets, the semicolon.
Oh interesting! Didn't know that. I personally think it's a bit confusing to have do "string": or :"string"if you wanted to have a key as a String instead of a Symbol. Good point to bring up though.
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
:colon
andcolon:
are both symbols in Ruby, a type of data (like strings, integers, etc).As this Stack Exchange answer says, symbols are immutable. The link explains it better than I would so I'll leave that for them.
In the context of Ruby and Rails, you won't have to know too much besides some syntax rules:
In previous versions of Ruby, the rocket or arrow syntax was the only way to have a symbol
key
point to a symbolvalue
. Now, you can do a short-hand version using the after colon syntaxcolon:
.One thing to note is that if you ever want a hash with a key that is a string, you have to use the arrow/rocket syntax:
For more info about that code, I recommend reading the Rails guide section about scaffolding, which explains the code generated via scaffolding.
just doing a nitpick addition :-) :
actually, this works just fine:
{"symbol-key-with-dash": :cool}
. its that you can write a Symbol literal with quotes::"looks-weird-still-is-symbol"
as a newcomer, my first "whoa" effect was when i realized that every function call like
render :show, status: :created, location: @user
is ultimately translated to:render(:show, {:status => :created, :location => @user});
. it's just that in ruby you don't have to specify that curly braces to make the last argument a Hash. ruby is implicit. you can omit the brackets, the semicolon.Oh interesting! Didn't know that. I personally think it's a bit confusing to have do
"string":
or:"string"
if you wanted to have a key as a String instead of a Symbol. Good point to bring up though.