이 구현하는 가장 좋은 방법은 무엇인지 모르겠습니다 - 기본적으로 내 모델의 내 : start_amount 필드가 0에서 user.amount 범위 내에 있는지 확인하고 싶습니다. 다른 검증과 같이 정적이 아니기 때문에 'user.amount'라고하는 방법을 모르겠습니다.사용자 정의 레일 유효성 검사
(참조를 위해 나는 validates_numericality_of :start_amount, :allow_nil => false, :greater_than => 0
을 한 다음 동일한 모델에서 이런 짓을 : 어쩌면 (
이def validates
self.errors.add(:start_amount, "is out of range") unless self.amount_in_allowed_range
end
def amount_in_allowed_range
start_amount <= user.amount
end
그것은 검증이 필요했다 위해 내가 다른 클래스를 만드는 생각하지 않았다 아주 간단 그게 작동하는 유일한 방법이야?) 그것은 내가 을 비교했을 때 어떤 경우에는 start_amount
을 공백으로 남겨 두었을 때를 제외하고는 괜찮 았고, 에러를 주었다. (나는 이상하다고 생각한다. 왜냐하면 validates_numericality_of- 그러나 나는 추측한다. e 사용자 지정 유효성 검사가 먼저 실행됩니다. 그런 다음 위의 내용으로 :allow_nil => false
으로 변경했으며 마이 그 레이션에서 :null => false, :default => 0
으로 설정했습니다. 이제는 전혀 확인하지 않는 것입니까? 또는 영구적으로 0이고, 따라서 항상 유효성 검사를 통과합니다.)
저는 레일이 정말 새롭고 도움이됩니다. 감사!
아 그렇습니다. 나는 이주를 의미했지만, 기본값 => 0 (수정 됨)이 아닙니다. 내가 제안한 것을 사용할 때 아무런 변화가 없습니다. 마치 사용자 정의 유효성 검사가없는 것과 같습니다. 기본 유효성 검사 유효성 검사 이름 인 것처럼 보였으므로 def 유효성 검사를 사용했습니다. .errors.add없이 사용자 정의 오류를 어떻게 제기 할 수 있습니까? nil이 user.amount와 비교 될 때 오류는 NoMethodError입니다. – butterywombat
맞습니다.'errors.add'가 필요하며 조건부 여야합니다. 그것을 반영하는 방법을 편집했습니다. – fflyer05