Respostas:
Desde Rails 3, você pode fazer:
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
) para um campo booleano (o campo não seria válido para um false
valor). Mas em ambos os Rails 3 e 4, tendo validates :field, inclusion: [true, false]
testaria para inclusão em uma lista de valores, com o efeito colateral de testar a presença do campo (a menos que um desses valores seja, é nil
claro).
validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
Eu acredito que para um campo booleano você precisará fazer algo como:
validates_inclusion_of :field_name, :in => [true, false]
De uma versão mais antiga da API : "Isso se deve à maneira como Object # blank? Lida com valores booleanos. False.blank? # => True"
Não tenho certeza se isso ainda vai funcionar para Rails 3, espero que tenha ajudado!
true
.
Quando aplico isso, recebo:
Aviso de igualadores de deveria:
Você está usando validate_inclusion_of
para afirmar que uma coluna booleana permite valores booleanos e não permite valores não booleanos. Esteja ciente de que não é possível testar isso totalmente, pois as colunas booleanas converterão automaticamente valores não booleanos em booleanos. Portanto, você deve considerar a remoção deste teste.
Você pode usar a versão mais curta:
validates :field, inclusion: [true, false]
Pensamento extra. Ao lidar com enums, também gosto de usar uma constante:
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
Resposta de acordo com Rails Docs 5.2.3
Este auxiliar (presença) valida se os atributos especificados não estão vazios. Ele usa o branco? método para verificar se o valor é nulo ou uma string em branco, ou seja, uma string que está vazia ou consiste em um espaço em branco.
Desde false.blank? for true, se você deseja validar a presença de um campo booleano, você deve usar uma das seguintes validações:
validates :boolean_field_name, inclusion: { in: [true, false] }