2010-01-28 6 views
1

나는 내 양식에서 몇 가지 날짜를 비교하려고합니다.레일 모델 유효성 검사 : 날짜의 심볼

임 내 검증 내가 좋아하는 뭔가가 있습니다

:mydate - 1.day 

을하지만 수 :

undefined method `-' for :mydate:Symbol" 

완전히 newb 질문,하지만 난 LOL을 파악하지 못할 - 어떻게에 날짜 계산을 수행 할 상징?

편집 :

OK, 그래서 나도 컨트롤러에서 PARAMS에 액세스하거나 양식 객체 기운 다. - 최종 결과는 체크인 날짜가 체크 아웃 날짜를 뺀 밤

의 수와 동일해야해야

def create 

@booking = Booking.new(params[:booking]) 

etc... 
end 

다음 내 모델에서 나는 약간의 날짜를 확인하려면 : 나는 기본적인 편안한 컨트롤러를 사용하고 있습니다

그래서 내 모델 :

class Booking < ActiveRecord::Base 

    def validate 
    errors.add_to_base "Nights Borked" if :checkin != (:checkout - :nights.day) 
    end 
end 

아니면 그하지만 캔트 그런 짓을하고 싶습니다.

나는 시도하고 액세스 @의 booking.checkin 내가 얻을 경우

정의되지 않은 메서드 '체크인'

나는 내가

undefined local variable or method `params' for #<Class:0x103fd1408> 

을 얻을

@foo = params[:booking][:checkin] 

을하려고하면 내가 여기서 무엇을 놓치고 있는지. 아마도 명백한 무언가가있을 것입니다.

+0

주변 코드를 더 많이 제공 할 수 있다면 완전한 대답을위한 충분한 컨텍스트를 제공 할 수 있습니다. –

답변

3

심볼은 단순히보다 정교한 문자열이기 때문에 심볼에 날짜 계산을 수행 할 수 없습니다. 이름이 아닌 다른 가치를 지니고 있지 않습니다. 하지만 속성이라고 MyDate가있는 모델이 가정 :

@object.mydate - 1.day 

을하거나 양식에서 전달 된 매개 변수가있는 경우 :

params[:mydate] - 1.day 
이 가 업데이트 된 코드 샘플을 감안할 때, 당신은 같은 속성을 호출 할

self.attribute, 그래서 같은 :

class Booking < ActiveRecord::Base 

    def validate 
    errors.add_to_base "Nights Borked" if self.checkin != (self.checkout - self.nights.day) 
    end 
end 

유효성 검증 방법은 이미 예약 객체에서 호출, 그래서 당신은 그 컨텍스트의 속성을 호출 할되고있다.

+0

확인 - 더 많은 코드로 업데이트 됨 - 여전히 모델의 매개 변수에 액세스 할 수 없었습니다./ – firecall

+0

이에 따라 대답을 –

+0

아, 고맙습니다. 레일스를 함께 사용하면 실제로 볼트가 어떻게 연결되는지 알 수있는 새롭지 만요. DIY PHP 세계에서 레일 클래스가 작동하는 방식은 항상 분명하지 않습니다 - 어쨌든 나처럼 덤 버서 : 감사합니다. – firecall