Respuestas:
Desde Rails 3, puede hacer:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
) para un campo booleano (el campo no sería válido para un false
valor). Pero tanto en los rieles 3 como en el 4, el tener validates :field, inclusion: [true, false]
probaría la inclusión en una lista de valores, con el efecto secundario para probar la presencia del campo (a menos que uno de esos valores sea, nil
por supuesto).
validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
Creo que para un campo booleano necesitarás hacer algo como:
validates_inclusion_of :field_name, :in => [true, false]
De una versión anterior de la API : "Esto se debe a la forma en que Object # blank? Maneja los valores booleanos. False.blank? # => True"
Sin embargo, no estoy seguro de si esto seguirá estando bien para Rails 3, ¡espero que haya ayudado!
true
.
Cuando aplico esto, obtengo:
Advertencia de los shoulda-matchers:
Está utilizando validate_inclusion_of
para afirmar que una columna booleana permite valores booleanos y no permite valores no booleanos. Tenga en cuenta que no es posible probar esto por completo, ya que las columnas booleanas convertirán automáticamente los valores no booleanos en valores booleanos. Por lo tanto, debería considerar eliminar esta prueba.
Puede utilizar la versión más corta:
validates :field, inclusion: [true, false]
Pensamiento extra. Cuando trato con enumeraciones, también me gusta usar una constante:
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
Responda de acuerdo con Rails Docs 5.2.3
Este ayudante (presencia) valida que los atributos especificados no estén vacíos. ¿Utiliza el espacio en blanco? para comprobar si el valor es nulo o una cadena en blanco, es decir, una cadena que está vacía o consta de espacios en blanco.
¿Desde false.blank? es cierto, si desea validar la presencia de un campo booleano, debe usar una de las siguientes validaciones:
validates :boolean_field_name, inclusion: { in: [true, false] }