2014-11-13 3 views
1

한 가지 방법에 대한 일부 필드와 다른 방법에 대한 모든 필드의 유효성을 검사해야하는 상황이 있습니다.ActiveModel에 대한 조건부 유효성 검사

class User < ActiveInteraction::Base 

def initialize 
    full_validation = true 
end 

# All user related auth data 
string :email 
string :password 
string :name 
string :surname 
string :phone 

@error 
@full_validation 
attr_accessor :error, :full_validation 

# Validation rules 
validates :email, 
    presence: true, 
    format: { 
    with: /^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/, 
    :multiline => true 
    } 

validates :password, presence: true, length: { minimum: 6 } 

validates :name, presence: true, 
    format: { 
    with: /^[a-zA-Z\d\s]*$/, 
    :multiline => true 
    }, :if => :full_validation? 

validates :surname, presence: true, 
    format: { 
    with: /^[a-zA-Z\d\s]*$/, 
    :multiline => true 
    }, :if => :full_validation? 

validates :phone, presence: true, :if => :full_validation? 

내가 user = User.new를 호출하고 user.full_validation = false 만 이메일과 비밀번호 필드를 호출하는 경우 그러나 검증은 if 이름, 성을위한 검증에서 진술되어야한다 :

이 내 모델 순간에 모습입니다 전화가이를 완전히 무시하고 유효성 검사 오류를 반환합니다.

def isFullValidation 
    full_validation == true 
end 

가 나는 또한 if: :full_validation? do .. end 문에서 3 개 유효성 검사 규칙을 with_options를 사용하여 포장 시도 :

는 또한 몇 가지 다른 접근 방식을 모든 작업 (오류없이)하지만 여전히 검증 모든 필드를 시도했다.

+1

그룹화 사용해보십시오? – Stefan

+0

@Stefan 나는 시도 : full_validation 중 하나를 작동하지 않았다. 오류 또는 예외는 성, 이름 및 전화 필드의 유효성 검사를 건너 뛰지 않습니다. –

+0

그것은 매우 이상합니다. 정의되지 않은 메서드를 호출하면 예외가 발생합니다. – Stefan

답변

1

는`full_validation?`어디 정의 된 조건 검증

with_options if: Proc.new { |u| u.is_full_validation? } do |user| 
    user.validates ... # pay attention to the 'user.' in front of each validation!! 
    user.validates ... 
end 

def is_full_validation? 
    full_validation == true 
end 
+1

camelCased 메소드 이름은 무엇입니까 ?? –

+0

@ Marc-AndréLafortune LOL, 네 말이 맞아! 나는 그 질문에서 그 방법을 복사하여 붙여 넣었지만, 그렇습니다! Rails는 규칙을 따르며이를 준수하는 것이 좋습니다. 대답을 바꾸게하십시오 – iMacTia

+0

이것은 나의 시도뿐 아니라 작동하지 않습니다. 나는 삽입 full_validation 바로 앞에 full_validation == true를 삽입했다. full_validation은 false로 설정되어 있지만 with_options 문 내의 해당 필드에 대한 유효성 검사가 여전히 수행되어 유효성 검사 오류가 발생합니다. –