2010-05-21 6 views
2

저는 레일에서 시작하여 간단한 응용 프로그램을 개발하려고합니다. 신청서에 제출 된 세 가지 값을 확인해야합니다. 각 값은 동일한 유효성 확인 기준을 충족해야합니다.레일 고유성 유효성 검사를 제외하고 사용

유효성 검사는 매우 간단합니다. 값은 unqiue, null 또는 "p"또는 "d"와 같으면 유효합니다.

다음은 절반이 저를 가져옵니다

validates_uniqueness_of :value1, :value2, :value3, :allow_nil => true 

은 내가 사용할 수 있다고 생각 : 값이 "P"또는 "D"중 하나인지 여부를 확인하지 않는 한, 그러나 나는 방법을 알아낼 수 없습니다.

나는 validates_uniqueness_of를 validates_inclusion_of와 결합하려고합니다.

제안 사항?

답변

2

몇 가지 방법이 있습니다. 아마 이런 식으로 뭔가 함께 갈 것 :

validates_uniqueness_of :wallport_id, :allow_nil => true, :unless Proc.new { |u| u.wallport_id == 'p' or u.wallport_id == 'd' } 

또한 다음과 같이 밖으로 자신의 방법에 여분의 논리를 깰 수 :

validates_uniqueness_of :wallport_id, :unless :has_nonunique_wallport_id 

NONUNIQUE_WALLPORT_IDS = ['p', 'd', nil] 

def has_nonunique_wallport_id 
    NONUNIQUE_WALLPORT_IDS.include? wallport_id 
end 

또는 자체에 전체 검증을 밀어 방법은 다음과 같이 :

당신이 가장 읽을 찾을 수있는 가장 좋은 방법은 아마 따라
validate :has_valid_wallport_id 

def has_valid_wallport_id 
    # check wallport id and return either true or false 
end 

이, 어떤 기능은 코드의 다른 부분에 노출 할 수 있습니다 (예를 들어, 알 수있는 사람 다른 필요성도 유효하지 않은 고유 한 wallport ids에 대한 정보) 및 예상되는 사항이 변경 될 수 있습니다 (예 : 유효한 고유하지 않은 ID를 나중에 추가 할 예정입니까?). 실제 검사를 수행하는 몇 가지 다른 방법이 있습니다.이 검사는 사용자가 가장 쉽게 읽을 수있는 것으로, 시스템이 어떻게 진화 할 것이라고 생각하는지에 달려 있습니다.

+0

위대한 - 당신이 대답 할 때마다 같은 방식으로 여러 변수의 유효성을 검사하도록 지정하기 위해 질문을 업데이트했습니다. 각 변수에 대한 유효성 검사를 정의하면 솔루션이 잘 작동한다고 생각하며 읽을 수 있습니다. . 많은 감사합니다. 나는 그 머리에 맞서 머리를 치고 있었다. – dunxd

관련 문제