반응형
다른 필드가 비어있는 경우에만 필드의 존재 여부 확인-Rails
휴대폰 / 휴대폰 번호와 집 전화 번호가있는 양식이 있습니다.
전화 번호가 비어 있거나 그 반대 인 경우에만 휴대 전화 / 휴대 전화 번호가 있는지 확인하고 싶습니다.
이 필드에 대한 현재 유효성 검사는 다음과 같습니다.
validates_presence_of :mobile_number
validates_presence_of :home_phone
validates_length_of :home_phone, :minimum => 12, :maximum => 12
validates_length_of :mobile_number, :minimum => 10, :maximum => 10, :allow_blank => true
validates_format_of :home_phone, :with => /\A[0-9]{2}\s[0-9]{4}\s[0-9]{4}/, :message => "format should be 02 9999 9999"
나는 다음과 같은 것을 가질 수 있다고 생각했지만 정확히 어떻게 해야할지 모르겠습니다.
validates_presence_of :mobile_number, :unless => :home_phone.blank?
Rails 3을 사용하고 있습니다.
람다가 필요하지 않습니다. 이것은 다음을 수행합니다.
validates_presence_of :mobile_number, :unless => :home_phone?
또한 모든 유효성 검사기는 동일한 if / unless 옵션을 사용하므로 조건부로 만들 수 있습니다.
업데이트 : 며칠 후이 답변을 되돌아 보면 왜 작동하는지 설명해야 함을 알았습니다.
- 유효성 검사기의
:unless
옵션을 심볼로 설정하면 Rails는 해당 이름의 인스턴스 메서드를 찾고 유효성 검사시 유효성 검사중인 인스턴스에서 해당 메서드를 호출하고 메서드가 false를 반환하는 경우에만 유효성 검사를 수행합니다. - ActiveRecord는 모델의 각 속성에 대한 물음표 메서드를 자동으로 생성하므로
home_phone
모델 테이블에 열이 있으면 Rails가 편리한#home_phone?
메서드 를 생성합니다 . 이 메서드는 home_phone이있는 경우에만 true를 반환합니다 (즉, 공백이 아님). home_phone 속성이 nil이거나 빈 문자열이거나 공백이 많은 경우 home_phone? 거짓을 반환합니다.
업데이트 :이 오래된 기술이 Rails 5에서 계속 작동하는지 확인했습니다.
lambda
/ Proc
개체를 사용해야 합니다.
validates_presence_of :mobile_number, :unless => lambda { self.home_phone.blank? }
Rails 4부터는 블록을 현재 상태로 전달할 수 있습니다. 간결하게 :
validates :mobile_number, presence: {unless: :home_phone?}
또한 :home_phone?
nil 또는 공백에 대해 false를 반환합니다.
레일 4에서 작동하는 또 다른 방법이 있습니다.
validates_presence_of :job, if: :executed_at?
validates :code,
presence: true,
length: { minimum: 10, maximum: 50 },
uniqueness: { case_sensitive: false },
numericality: { only_integer: true }
짧은 해결책 :
validates_presence_of :mobile_number, unless: -> { home_phone.blank? }
반응형
'IT story' 카테고리의 다른 글
개발 SSL에 makecert 사용 (0) | 2021.01.05 |
---|---|
sed 또는 awk 만 사용하여 html 페이지에서 URL을 추출하는 가장 쉬운 방법 (0) | 2021.01.05 |
나뭇 가지에 두 줄을 결합하는 방법? (0) | 2021.01.05 |
Android 발리 라이브러리에서 쿠키 사용 (0) | 2021.01.05 |
로그를 사용하지 않고 Go에서 Stderr로 인쇄하는 방법 (0) | 2021.01.05 |