Réponses:
Depuis Rails 3, vous pouvez faire:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
) pour un champ booléen (le champ ne serait pas valide pour une false
valeur). Mais dans les deux Rails 3 et 4, avoir validates :field, inclusion: [true, false]
testerait l'inclusion dans une liste de valeurs, avec l'effet secondaire de tester la présence du champ (sauf si l'une de ces valeurs est nil
bien sûr).
validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
Je crois que pour un champ booléen, vous devrez faire quelque chose comme:
validates_inclusion_of :field_name, :in => [true, false]
À partir d'une ancienne version de l' API : "Cela est dû à la façon dont Object # blank? Gère les valeurs booléennes. False.blank? # => True"
Je ne sais pas si cela fonctionnera toujours pour Rails 3, j'espère que cela a aidé!
true
.
Lorsque j'applique ceci, j'obtiens:
Avertissement des shoulda-matchers:
Vous utilisez validate_inclusion_of
pour affirmer qu'une colonne booléenne autorise les valeurs booléennes et interdit les valeurs non booléennes. Sachez qu'il n'est pas possible de tester complètement cela, car les colonnes booléennes convertiront automatiquement les valeurs non booléennes en valeurs booléennes. Par conséquent, vous devriez envisager de supprimer ce test.
Vous pouvez utiliser la version plus courte:
validates :field, inclusion: [true, false]
Pensée supplémentaire. Lorsque je traite des énumérations, j'aime aussi utiliser une constante:
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
Réponse selon Rails Docs 5.2.3
Cet assistant (présence) valide que les attributs spécifiés ne sont pas vides. Il utilise le blanc? pour vérifier si la valeur est nulle ou une chaîne vide, c'est-à-dire une chaîne vide ou constituée d'espaces.
Depuis false.blank? est vrai, si vous souhaitez valider la présence d'un champ booléen, vous devez utiliser l'une des validations suivantes:
validates :boolean_field_name, inclusion: { in: [true, false] }