[Ruby] Atributos booleanos

-
A nivel base de datos, muchos desarrolladores utilizan para valores booleanos un char(1) que contiene la "t" o "f", o sinó en español, "v" o "f". Otros utilizan los valores de tipo entero donde 0 es falso y 1 es verdadero. Incluso si la BD soporta tipo de datos boolenos (como MySQL y su tipo de columna bool) que podría ser almacenado directamente como 0 o 1 internamente.

El problema es que en Ruby el número 0 y la cadena "f" son interpretados como verdadero en condiciones. Esto significa que si utilizamos el valor de la columna directamente, nuestro código interpretará la columna como verdadero cuando nosotros pensábamos que era falsa:






# NO HACER ESTO!!
user = Users.find_by_name("Dave" )
if user.superuser
grant_privileges
end



Ruby tiene una simple definición de verdadero. Cualquier valor que no es nil ni false es verdadero.



# ES CORRECTO HACER:
user = Users.find_by_name("Dave" )
if user.superuser?
grant_privileges
end



Aquí se interpreta como falso sólo si es el número 0, una de las cadenas "0", "f", "false", o "" (cadena vacía), un cero, o la constante false. De lo contrario, se interpreta como verdadero.

Fuente: Agile Web Development with Rails - 3rd Edition

Comentarios