2010-08-31 19 views

Respuesta

204

Desde Rails 3, que puede hacer:

validates :field, inclusion: { in: [ true, false ] } 
+1

+1 Sí. Me gusta que brinden una manera de hacerlo así. – DJTripleThreat

+2

Por lo tanto, esto obtiene la validación correcta, pero el mensaje de error no es útil para el usuario final: "myfield no está incluido en la lista" –

+2

Buen punto. Puede personalizar el mensaje de error: http://guides.rubyonrails.org/active_record_validations_callbacks.html#message –

37

creo que para un campo booleano que tendrá que hacer algo como:

validates_inclusion_of :field_name, :in => [true, false] 

de una versión anterior del API: "Esto es debido a la forma del objeto # blanco maneja valores booleanos falsa?.. en blanco? # => verdadero "

No estoy seguro si esto todavía estará bien para Rails 3, ¡espero que haya sido útil!

+0

lol @ Rails 3. Puedo apostar que esta será la advertencia en los próximos meses. Ok, pensé que esta migth había sido y estás de acuerdo. ¡Gracias! – DJTripleThreat

+0

¡Es cierto para Rails 4! Wow, false.blank? # => verdadero solo parece la respuesta * incorrecta *, algo que no esperaría de Rails. –

8

Cuando aplico esto, me sale:

Advertencia de Shoulda-comparadores:

está usando el validate_inclusion_of afirmar que un valor lógico La columna permite valores booleanos y no permite los valores no booleanos. Tenga en cuenta que no es posible probarlo completamente, ya que las columnas booleanas convertirán automáticamente los valores no booleanos en booleanos. Por lo tanto, usted debería considerar eliminar esta prueba.

+0

Para los campos donde se permite null, ¿todavía se convierte nil en booleano? – mwfearnley

Cuestiones relacionadas