2010-08-20 13 views
24

Tengo un campo DB que es un tipo entero y los valores son siempre 0 o 1. ¿Cómo puedo obtener el valor booleano equivalente en ruby? de tal manera que cuando hago la siguiente la casilla de verificación con el valor apropiado:ruby ​​entero a booleano

<%= check_box_tag 'resend', @system_config.resend %> 

Respuesta

44

Se puede usar el método zero?. Devuelve verdadero si 0. Si necesita retroceder, puede negarlo fácilmente al [email protected]_config.resend.zero?. O bien, podría extender la clase Fixnum, agregando un método to_b?, ya que todo está abierto y es extensible en idiomas dinámicos.

class Integer 
    def to_b? 
    !self.zero? 
    end 
end 

alt text

Rubí API: http://ruby-doc.org/core/classes/Fixnum.html#M001050

+0

Gracias Jarret. Parte de mi solución también fue usar el asistente de check_box_tag correctamente así: <% = check_box_tag 'reenviar', @ system_config.resend, @ system_config.resend%> – Rafael

+1

Tenga en cuenta que también hay ['nonzero?'] (Http: //ruby-doc.org/core-1.9.3/Numeric.html#method-i-nonzero-3F) que puede leer mejor que '! zero?'. –

+6

¿Hizo intencionalmente su símbolo de comando BSoD colores? – NullVoxPopuli

9

1 es su único valor de verdad aquí. Para que pueda obtener el valor de verdad booleano con number == 1.

+0

Quizás esto podría estar redactado con más claridad. Casi pensé que querías decir que esto era ruby ​​estándar. La respuesta aceptada parece dar un rubí -una solución compatible con la norma, que también encaja con la pregunta real. –

+0

@Simon B .: No estoy seguro de qué pasa con mi respuesta ems "no estándar" para usted. Ambos métodos '==' y 'zero?' Son estándar Ruby. Pero sucede que 'number == 1' lee más claramente que'! Number.zero? 'IMO. – Chuck

+0

En ruby, tanto 0 como 1 son "verdad", por lo que en realidad no hay ninguna posibilidad de hacer una respuesta aquí tanto "estándar" y responder a la pregunta. Lo siento. Tal vez sea mejor tratar de incluir esto en el texto o título de la pregunta. Cualquiera que venga aquí buscando "fundición de tipo fiel al rubí" de Fixnum a Boolean se confundirá de cualquier manera. Además, según http://drawingablank.me/blog/ruby-boolean-typecasting.html parece! es la única opción fiel al rubí. Lo cual no es una opción en la pregunta anterior. –

2

que tenían el mismo problema y se ocupó de esta manera:

def to_boolean(var) 
case var 
     when true,'true',1,'1' 
     return true 
     when false, 'false',0,'0' 
     return false 
end 
end 

Esto funciona con formularios, bases de datos y las personas que no saben rubí. Encontré que es útil especialmente con Rails, ya que los parámetros a menudo se pasan/interpretan como cadenas y no quiero preocuparme por eso.

+2

La sangría aquí no es estándar. La forma más simple sería def to_boolean (valor) ['true', 1, '1', true] .include? (Valor) final –

Cuestiones relacionadas