2011-10-29 6 views
0

레일스 3.0.3을 사용하고 있는데 여기에는 광범위한 유효성 검사 프로세스가 있습니다.레일 : 인수를 사용하여 유효성 검사

나는 어떤 변수가 적절한 날짜

경우입니다 기본적으로이 내가하고 싶은 것입니다 내가 확인 검증을 만들고 싶어 :

def validate_date(this_date)? 

    begin 
     Date.parse(this_date) 
    rescue 
     proper_date = false 
    else 
      proper_date = true 
    end 
end 

및 사용하여 내 모델에서이 메소드를 호출 :

attr_accessor :given_date  
validate_date(given_date) 

뿐만 아니라, 예를 들어 사용하여 내 검증 파일에 다른 장소에서 :

attr_accessor :another_date 
validate_date(another_date) 

또는 이와 비슷한 ...

이 작업을하려면 어떻게해야합니까?

답변

1

는 NKM의 대답에 비슷한입니다 :

validates :name, 
    presence => true # or other standard validations 
validate :valid_my_date_variable 

def valid_my_date_variable 
    if my_date_variable.present? 
    errors[:my_date_variable] << "is not valid" unless valid_date(my_date_variable) 
    end 
end 

def validate_date(this_date)? 
    begin 
    Date.parse(this_date) 
    rescue 
    proper_date = false 
    else 
    proper_date = true 
    end 
end 

또는 당신은 당신의 날짜에 대한 검증을 만들고 표준 유효성 검사기를 사용로 사용할 수 있습니다.

모델을보다 깨끗하게 유지하려면 맞춤형 검사기를 만드는 방법에 대해서는 documentation을 참조하십시오.

+0

당신의 코드에 약간의 오류가 있었지만 그것을 고칠 수있는이 방법은 작동합니다! – Christoffer

3

가 대신 false를 반환하는 오류를 추가 할, 그래서 대신 사용할 :

errors.add(:date, "is invalid") 
+0

감사합니다. 실제로 이미 그렇게했습니다. 그것은 정말로 내 질문의 핵심을 해결하지 않습니다. 어떻게 인수를 사용하여이 함수를 호출해야합니다. – Christoffer

0

을 this_date 우리가 확인해야 할 속성 (COLUMN_NAME)는 가정, 우리는 다음과 같은 작업을 수행 할 수

validate :validate_date 

    def validate_date 
    begin 
     Date.parse(this_date) 
    rescue 
     errors.add(:this_date, "is not valid") 
    end 
    end 

참조 : http://guides.rubyonrails.org/active_record_validations_callbacks.html#using-a-symbol-with-if-and-unless

+0

정말 그것에 대해 잘 모르겠습니다. 그것은 날짜의 유효성을 검증 할 때 이름의 존재를 확인하게 할 것입니다. validate date가 false를 반환하면 이름의 유효성을 검사하지 않습니다. Niclas의 답변과 함께 사용하지 않는 한 오류를 게시할지 여부는 영향을주지 않습니다. Alos, 메서드 호출 : validate_date (this_date)? 작동하지 않는 것 같습니다. 이 오류가 발생합니다 : 구문 오류, 예기치 않은 '(', 기대하는 키워드 _end => 참 : : if => : validate_date (given_date)? – Christoffer

+0

죄송합니다. 위의 코드를 잘못 업데이트했습니다 ... – nkm

0

내 의견은 당신이 처음에 그렇게하지해야한다는 것입니다. 유효성 검증은 유효성 검증 메소드에 대한 입력 인수에 대한 것이 아니라 모델 속성에 대해 발}합니다. 다음을 수행 :

def validate_date 

    begin 
    Date.parse(this_date) 
    rescue 
    errors[:date_attribute] << 'is invalid date' 
    end 
end 

위의이 코드는 당신이 당신의 Model의 속성 date_attribute 있다고 가정합니다. 그에 따라 변경하십시오. 당신이 무엇을해야

+0

감사합니다. ,하지만 내 응용 프로그램의 설치로 인해 하나의 파일 (필요한) 내 모든 유효성 검사가 및 입력 인수를 사용해야합니다. 그래서이 작동하지 않습니다 ... – Christoffer