I am following along with the Rails 3 in Action book, and it is talking about override to_s
in the model. The code is the following:
def to_s
"#{email} (#{admin? ? "Admin" : "User"})"
end
I know that in Ruby you can display a value inside double quotes by the "#{value}"
, but what's up with the double question marks?
This function is returning a string with the email and whether it they are an admin or user... ie
so the call
would return the string
Actually admin? is a function(probably defined somewhere in controller/helper method or model) that return boolean(true or false) and next question mark is just like a if condition
first portion before ":" is for true case and other is for false case
Don't see it as a double question mark, the first question mark is part of the method name (Ruby allows methods name to end with "!", "?", "=", "[]", etc). Since admin is a boolean value ActiveRecord add an admin? method that returns true if the user is an admin, false otherwise.
The other question mark is used with the colon (:) and you can see it like:
If condition is true the first statement is executed, else the second one it evalueted.
So put these two things together and you have a string concatenation that add the "Admin" or "User" word between parenthesis.
The first question mark is attribute query methods in rails. http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Attribute+query+methods
(provided you did not overwrite / redefine that method)
It is a shorthand method to see if that attribute present or not.
It's string interpolation.
"#{email} (#{admin? ? "Admin" : "User"})"
is equivalent tothat is
As a result of being enclosed in quotes, in this context
Admin
andUser
are used as strings and not as constants.