2014-09-07 1 views
2

저는 datetime 형식 (시작 날짜와 종료 날짜)을 제공하는 form_for가 있습니다. 내 목표는 end_date> start_date를 확인하는 것입니다. 내 모델에서Ruby on Rails에서 저장하기 전에 datetime을 확인하십시오.

내가 그렇게하는 방법을 모른다는, 여기에 내가 (작동하지 않는) 지금까지 한 일이다

class XXX < ActiveRecord::Base 
    before_create :check_dates 

    private 

    def check_dates 
     if self.end_date > self.start_date //I don't know how to do it 
    end 
end 

오류 :

syntax error, unexpected end-of-input, expecting keyword_end 

감사

+0

왜 안'self.end_date' 및 'self.start_date'? – IS04

+0

네,하지만 내 실제 변수 이름이 아니에요, 더 구문 요청 :) 어쨌든 난 내 게시물을 수정 –

+0

@ ZazOufUmI 무슨 일이야? 이것은 작동해야합니다 – Mandeep

답변

2

디프의 대답은 포괄적이고 당신이 원하는 것을 커버하는 유효성 검사를 사용하는 경우가 더 좋을 것 같아요. 난 그냥 당신이 검증 모델을 만들 수 있습니다 다른 모델이 유효성 검사기를 사용하고자하는 경우 추가 할 :

class MyValidator < ActiveModel::Validator 
    def validate(record) 
    if record.end_date > record.start_date 
     record.errors[:base] << 'End date should be greater that start date!' 
    end 
    end 
end 

class XXX < ActiveRecord:Base 
    include ActiveModel::Validations 
    validates_with MyValidator 
end 

코드는 rubyonrails.org에서입니다 : http://edgeguides.rubyonrails.org/active_record_validations.html

+0

이 메시지는 정상적으로 표시되지만 오류가 발생하면 메시지를 표시하지 않고 루트 경로로 리디렉션됩니다 –

4

콜백 내부에 조건이 있기 때문에이 오류가 발생합니다. 이 조건이 true로 평가 될 때 수행 할 작업을 지정하지 않았고 if 문을 닫지 않았으므로 구문 오류. 콜백도하지만 귀하의 경우 같은 일을 할 것입니다하지만 난 당신이 대신

class XXX < ActiveRecord::Base 
    validate :check_dates 

    def check_dates 
    errors.add(:base, "end date should be greater than start") if self.end_date > self.start_date //I don't know how to do it 
    end 
end 
+1

'before_create'보다'validate : check_dates'를 사용하는 것이 더 낫다고 생각합니다. – Arijoon

+0

@Arijoon 그래, 방금 업데이트했습니다. – Mandeep

관련 문제