2008-09-24 9 views
7

En mi aplicación Rails tengo una lista de elementos (como una lista de tareas) y para cada elemento hay un par de casillas de verificación para establecer los parámetros.Rieles Casilla de verificación en MySql almacenada como cero o cero

Cuando envío el formulario, el recuadro marcado se almacena como cero y el desmarcado como nulo en el DB.

la pregunta es: ¿hay alguna manera de configurarlo? Para almacenar los datos en un 0 o 1 más tradicional, porque creo que almacenar nulo como falso y 0 como verdadero es un poco confuso, especialmente si otra aplicación (como una aplicación C) necesita leer los datos.

+0

¿Qué versión de Rails está ejecutando? –

Respuesta

3

Supongamos que el atributo con el que está trabajando es club_member como en "are you a club_member?".

Tenga en cuenta que en Ruby/Rails, la forma en que está trabajando ahora, if model.club_member devolverá falso si no está marcado (el valor es nulo o en Ruby, cero) y verdadero si está marcado (valor 0).

En general, recomendaría encarecidamente que en lugar de dejar otras aplicaciones (como una aplicación C) directamente en sus datos, debería crear una API en Ruby/Rails para exponer los datos de su aplicación a entidades externas. De esta manera, encapsulará mejor las partes internas de su aplicación y no tendrá que preocuparse por cosas como esta.


Sin embargo, todo lo que se dice, aquí es su respuesta:

Uso:

value="1" 

... atributo en las etiquetas de HTML casilla de verificación, y establecer el valor por defecto de la boolean atributo (en su migración) a 0.

+0

¡Gracias! Esto resolvió el problema (incluido el valor = 1) y estableciendo el valor predeterminado en la migración a 0. – bcsanches

+0

Estoy enfrentando el mismo problema pero estoy usando el formulario ExtJS. Intenté establecer el valor predeterminado en 0 (en el archivo de migración) y valor: 1 en el componente de casilla de verificación, pero el problema aún persiste. Alguna idea con extjs? – Rashmi

+0

@Rashmi No estoy familiarizado con ExtJS. Le recomendaría que configure dos casillas de verificación, marque una y deje la otra sin marcar y envíe el formulario. En su controlador, haga un 'raise params.inspect' al comienzo de su acción para que pueda ver en el backtrace exactamente lo que está pasando del formulario a la aplicación para cada situación. – Yardboy

2

Hay una serie de razones posibles para esto:

  • Asegúrese de que la columna en la base de datos es de tipo "booleano" en la migración
  • Coloque un defecto en valores booleanos
  • Use "check_box" en el formulario, no "check_box_tag"
  • Algunas versiones de Rails tuvieron este comportamiento en los andamios generados, creo que al establecer el valor predeterminado se corrigió esto, pero no recuerdo bien.
+0

La columna en db se establece en true y forcé su valor predeterminado a falso. ¡El nulo se ha ido, pero ahora todos los valores son cero! Estoy creando la casilla de verificación sobre la marcha con dom dinámico, tal vez este es el problema. – bcsanches

+0

Si lo usa dinámicamente, podría estar bien. Recomiendo hacerlo primero a través de los ayudantes estándar de Rails, y luego imitar el HTML generado en la manipulación DOM. –

1

Qué tal:

value.to_i.zero?

>> a=nil 
=> nil 
>> a.to_i.zero? 
=> true 
>> a=0 
=> 0 
>> a.to_i.zero? 
=> true 
>> a=3 
=> 3 
>> a.to_i.zero? 
=> false 
0

De la documentación rieles:

Un objeto está en blanco si es falso, vacío, o una cadena de espacios en blanco. Por ejemplo, "", "", nil, [] y {} están en blanco.

Esto simplifica: if! Address.nil? & &! Address.empty?

... a: if! Address.blank?