답변:
Rails 3부터 다음을 수행 할 수 있습니다.
validates :field, inclusion: { in: [ true, false ] }
validates :field, inclusion: [true, false]
validates :field, presence: true
부울 필드 의 존재 여부 ( )에 대한 일반적인 유효성 검사를 할 수 없습니다 (필드는 false
값에 대해 유효하지 않음 ). 그러나 Rails 3과 4 validates :field, inclusion: [true, false]
에서 필드의 존재를 테스트하는 부작용과 함께 값 목록에 포함되는지 테스트했습니다 ( nil
물론 해당 값 중 하나가 아닌 경우 ).
validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
부울 필드의 경우 다음과 같은 작업이 필요하다고 생각합니다.
validates_inclusion_of :field_name, :in => [true, false]
이전 버전의 API : "Object # blank?가 부울 값을 처리하는 방식 때문입니다. false.blank? # => true"
그래도 Rails 3에서 이것이 여전히 괜찮을지 확실하지 않습니다.
true
.
이것을 적용하면 다음을 얻습니다.
shoulda-matchers의 경고 :
validate_inclusion_of
부울 열이 부울 값을 허용하고 부울이 아닌 값을 허용하지 않는다고 주장하는 데 사용 하고 있습니다. 부울 열이 부울이 아닌 값을 부울 값으로 자동 변환하므로이를 완전히 테스트 할 수는 없습니다. 따라서이 테스트를 제거하는 것을 고려해야합니다.
더 짧은 버전을 사용할 수 있습니다.
validates :field, inclusion: [true, false]
추가 생각. 열거 형을 다룰 때 상수도 사용하는 것을 좋아합니다.
KINDS = %w(opening appointment).freeze
enum kind: KINDS
validates :kind, inclusion: KINDS
Rails Docs 5.2.3 에 따른 답변
이 도우미 (존재)는 지정된 속성이 비어 있지 않은지 확인합니다. 공백을 사용합니까? 값이 nil인지 또는 공백 문자열인지, 즉 비어 있거나 공백으로 구성된 문자열인지 확인하는 메소드입니다.
false.blank 이후? true 인 경우 부울 필드가 있는지 확인하려면 다음 유효성 검사 중 하나를 사용해야합니다.
validates :boolean_field_name, inclusion: { in: [true, false] }