유효성을 검사하고 싶은 필드가 있습니다. 필드를 비워 둘 수 있기를 원하지만 사용자가 데이터를 입력하는 경우 특정 형식을 원합니다. 현재 모델에서 아래 유효성 검사를 사용하고 있지만 사용자가 공백으로 둘 수는 없습니다.
validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5
내 목표를 달성하기 위해 어떻게 작성합니까?
답변
다음과 같은 것이 필요할 수 있다고 생각합니다.
validates_length_of :foo, minimum: 5, maximum: 5, allow_blank: true
답변
다음 형식을 사용할 수도 있습니다.
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