Esta pregunta es bastante antigua, pero dado que me encontré con este problema un par de veces, y no me gustó ninguna de las soluciones propuestas, pirateé algo que permite usar varias cadenas para verdadero como ' yes ',' on ',' t 'y lo opuesto a falso.
mono parche de la clase String, y añadir un método para convertirlos a boolean, y poner este archivo en /config/initializers
como se sugiere aquí: Monkey Patching in Rails 3
class String
def to_bool
return true if ['true', '1', 'yes', 'on', 't'].include? self
return false if ['false', '0', 'no', 'off', 'f'].include? self
return nil
end
end
Tenga en cuenta que si el valor es ninguno de los válidos, ya sea para verdadero o falso, entonces devuelve nil. No es lo mismo buscar ?paid=false
(devolver todos los registros no pagados) que ?paid=
(no especifico si debe pagarse o no, así que descarte esto).
Entonces, siguiendo este ejemplo, la lógica en el controlador se vería así:
Something.where(:paid => params[:paid].to_bool) unless params[:paid].try(:to_bool).nil?
es bastante ordenado, y ayuda a mantener controladores/modelos limpio.
No hay tal cosa como booleanos en rubí, solamente '' TrueClass' y FalseClass' – NullUserException
rieles todavía se lo imagina automágicamente cuando el parámetro está asociado un modelo: si el tipo de columna en la base de datos es booleano, trata el parámetro como 'TrueClass' o' FalseClass'.¿Alguna idea de cómo puedo hacer esto bien? – nfm
posible duplicado de [¿Cómo comprobar si un parámetro es verdadero o falso?] (Http://stackoverflow.com/questions/1711547/how-to-check-if-a-param-is-true-or-false) debido a "¿Hay una forma mejor de hacer esa declaración if/else basada en un param que sea verdadera o falsa?" –