[ruby-on-rails] Rails : 무언가가 부울인지 어떻게 검증합니까?

레일 validates_numericality_of에 부울 과 같은 유효성 검사기가 있습니까? 아니면 직접 굴려야합니까?



답변

Rails 3부터 다음을 수행 할 수 있습니다.

validates :field, inclusion: { in: [ true, false ] }


답변

부울 필드의 경우 다음과 같은 작업이 필요하다고 생각합니다.

validates_inclusion_of :field_name, :in => [true, false]

이전 버전의 API : “Object # blank?가 부울 값을 처리하는 방식 때문입니다. false.blank? # => true”

그래도 Rails 3에서 이것이 여전히 괜찮을지 확실하지 않습니다.


답변

이것을 적용하면 다음을 얻습니다.

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] }


답변