Antworten:
Seit Rails 3 können Sie Folgendes tun:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
für ein boolesches Feld nicht die übliche Validierung für das Vorhandensein ( ) haben können (das Feld wäre für einen false
Wert nicht gültig ). In beiden Schienen 3 und 4 validates :field, inclusion: [true, false]
würde jedoch geprüft, ob sie in eine Werteliste aufgenommen wurden, mit dem Nebeneffekt, dass das Feld vorhanden ist (es sei denn, einer dieser Werte ist nil
natürlich).
validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
Ich glaube, für ein boolesches Feld müssen Sie etwas tun wie:
validates_inclusion_of :field_name, :in => [true, false]
Aus einer älteren Version der API : "Dies liegt an der Art und Weise, wie Object # blank? Mit booleschen Werten umgeht. False.blank? # => True"
Ich bin mir nicht sicher, ob dies für Rails 3 noch in Ordnung ist, hoffe, das hat geholfen!
true
.
Wenn ich das anwende, bekomme ich:
Warnung von sollte-Matchern:
Sie verwenden validate_inclusion_of
, um zu behaupten, dass eine boolesche Spalte boolesche Werte zulässt und nicht boolesche Werte nicht zulässt. Beachten Sie, dass dies nicht vollständig getestet werden kann, da boolesche Spalten nicht-boolesche Werte automatisch in boolesche Werte konvertieren. Daher sollten Sie diesen Test entfernen.
Sie können die kürzere Version verwenden:
validates :field, inclusion: [true, false]
Zusätzlicher Gedanke. Beim Umgang mit Aufzählungen verwende ich auch gerne eine Konstante:
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
Antwort gemäß Rails Docs 5.2.3
Dieser Helfer (Anwesenheit) überprüft, ob die angegebenen Attribute nicht leer sind. Es benutzt das Leerzeichen? Methode zum Überprüfen, ob der Wert entweder null oder eine leere Zeichenfolge ist, dh eine Zeichenfolge, die entweder leer ist oder aus Leerzeichen besteht.
Da false.blank? Wenn Sie das Vorhandensein eines booleschen Felds überprüfen möchten, sollten Sie eine der folgenden Überprüfungen verwenden:
validates :boolean_field_name, inclusion: { in: [true, false] }