web-dev-qa-db-fra.com

Rails: comment puis-je valider que quelque chose est un booléen?

Rails a-t-il un validateur comme validates_numericality_of pour booléen ou dois-je rouler le mien?

109
aarona

Depuis Rails 3, vous pouvez faire:

validates :field, inclusion: { in: [ true, false ] }
232
Drew Dara-Abrams

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 : "Ceci est dû à la façon dont Object # blank? Gère les valeurs booléennes. False.blank? # => True"

Je ne sais pas si ce sera toujours bien pour Rails 3 cependant, j'espère que cela a aidé!

38
Budgie

Lorsque j'applique ceci, j'obtiens:

Avertissement des correspondances aux épaules:

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 convertissent automatiquement les valeurs non booléennes en valeurs booléennes. Par conséquent, vous devriez envisager de supprimer ce test.

9
user708617

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
4
Flavio Wuensche

Réponse selon Rails Docs 5.2.

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 nil 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] }
1
Cody Elhard