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


87

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

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

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

답변:



130

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

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

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

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

11

로부터 validates_length_of 문서 :

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

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


11

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

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

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


in
In't

1
대신 작동해야 validates :foo, length: 2..5, allow_blank: true하지만`length : {is : 5}`는 OP의 경우에서 작동합니다
PhilT

3

모든 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?}

2
validates_length_of :reason, minimum: 3, maximum: 30

동일한 rspec은

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

2

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


-1

모델에 추가 :

validates :color, length: { is: 7 }

색상은 문자열입니다.

t.string :color, null: false, default: '#0093FF', limit: 7

-4

예를 들어 모델에서

def validate
  errors.add_to_base 'error message' unless self.foo.length == 5 or self.foo.blanc?
end
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.