[ruby-on-rails] Rails : 문자열의 최소 및 최대 길이를 확인하지만 공백 일 수 있음

유효성을 검사하고 싶은 필드가 있습니다. 필드를 비워 둘 수 있기를 원하지만 사용자가 데이터를 입력하는 경우 특정 형식을 원합니다. 현재 모델에서 아래 유효성 검사를 사용하고 있지만 사용자가 공백으로 둘 수는 없습니다.

validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5

내 목표를 달성하기 위해 어떻게 작성합니까?



답변

다음과 같은 것이 필요할 수 있다고 생각합니다.

validates_length_of :foo, minimum: 5, maximum: 5, allow_blank: true

더 많은 예 : ActiveRecord :: Validations :: ClassMethods


답변

다음 형식을 사용할 수도 있습니다.

validates :foo, length: {minimum: 5, maximum: 5}, allow_blank: true

또는 최소값과 최대 값이 같으므로 다음도 작동합니다.

validates :foo, length: {is: 5}, allow_blank: true


답변

로부터 validates_length_of 문서 :

validates_length_of :phone, :in => 7..32, :allow_blank => true

:allow_blank-속성은 공백 일 수 있습니다. 유효성 검사를 건너 뜁니다.


답변

또는 validates 문서 에서보다 간결하게 (새로운 해시 구문 사용) :

validates :foo, length: 5..5, allow_blank: true

상한은 아마도 “in : 5..20″과 같이 좀 더 의미있는 것을 나타내야하지만 그저 편지에 대한 질문에 답하는 것뿐입니다.


답변

모든 validates_ *는 : if 또는 : unless 옵션을 허용합니다.

validates_length_of :foo, :maximum => 5, :if => :validate_foo_condition

여기서 validate_foo_condition은 true 또는 false를 반환하는 메서드입니다.

Proc 객체를 전달할 수도 있습니다.

validates_length_of :foo, :maximum => 5, :unless => Proc.new {|object| object.foo.blank?}


답변

validates_length_of :reason, minimum: 3, maximum: 30

동일한 rspec은

it { should validate_length_of(:reason).is_at_least(3).is_at_most(30) }


답변

어떻게에 대한:
validates_length_of :foo, is: 3, allow_blank: true