Risposte:
Da Rails 3, puoi fare:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
) per un campo booleano (il campo non sarebbe valido per un false
valore). Ma in entrambi i Rails 3 e 4, aver validates :field, inclusion: [true, false]
testato l'inclusione in un elenco di valori, con l'effetto collaterale di testare la presenza del campo (a meno che uno di quei valori non sia nil
ovviamente).
validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
Credo che per un campo booleano dovrai fare qualcosa come:
validates_inclusion_of :field_name, :in => [true, false]
Da una versione precedente dell'API : "Ciò è dovuto al modo in cui Object # blank? Gestisce i valori booleani. False.blank? # => True"
Non sono sicuro che questo andrà ancora bene per Rails 3, spero che abbia aiutato!
true
.
Quando lo applico, ottengo:
Avvertimento da parte di shoulda-matchers:
Stai utilizzando validate_inclusion_of
per affermare che una colonna booleana consente valori booleani e non consente quelli non booleani. Tieni presente che non è possibile testarlo completamente, poiché le colonne booleane convertiranno automaticamente i valori non booleani in valori booleani. Quindi, dovresti considerare di rimuovere questo test.
Puoi usare la versione più breve:
validates :field, inclusion: [true, false]
Pensiero extra. Quando si tratta di enumerazioni, mi piace usare anche una costante:
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
Risposta secondo Rails Docs 5.2.3
Questo helper (presenza) convalida che gli attributi specificati non sono vuoti. Usa lo spazio vuoto? per verificare se il valore è nullo o una stringa vuota, ovvero una stringa vuota o composta da spazi.
Dal momento che false.blank? è vero, se vuoi validare la presenza di un campo booleano dovresti usare una delle seguenti validazioni:
validates :boolean_field_name, inclusion: { in: [true, false] }