2016-07-21 1 views
0

내 모델이 검증이 선택된 후 오류를 트리거하지 않고 과거에되지 않습니다 :유효성 검사 시간은 두 번째는 과거가있는 경우 당신은 시간

def time_in_future 
    if start_at? 
    errors[:base] << 'The Start Date can not be in the past.' if start_at < Time.zone.now 
    end 
end 

하지만이 오류가 저장 내가 시도 할 때마다 그 나는 나의 유효성 검사에서 요구하고있다. 그것은 이치에 맞는다. 나는 시간을 두 번째에 상관없이 내가 저장하면, 시간을 선택하는 데 두 번째 이상 걸릴 때문에 "datetimepicker에 자동으로로드하는 시간이 과거에 시간이 될 것"때문에 저장 "을 클릭하십시오.

몇 가지 해결책을 생각해 보았습니다. 가장 간단한 방법은 오류 메시지를 "The Start Date must be a time in the Future."으로 쉽게 읽도록하는 것입니다. 또는 저장하기 전에 start_at 시간이 자동으로 저장되므로 나중에 15 분이 지나야합니다.

사람들이 정기적으로 만나는 상황이라고 가정합니다.이 상황을 해결할 더 좋고 더 일반적인 방법이 있습니까?

귀하의 의견에 감사드립니다.

편집 :

내 업데이트 입력 복용 후 방법. "유예 기간"

def time_in_future 
    if start_at? do 
     errors[:base] << 'The Start Date must be in the future. Seconds count!' if start_at < DateTime.current + 15.minutes 
    end 
    end 
end 
+1

"start_at?"메서드는 무엇입니까? ? "start_at?"을 확인합니다. 처음과 그곳에서 "start_at"(속성, 나는 추측합니다)를 확인합니다. –

+1

방금 ​​거대한'Time' 두통이 있었고, 배운 것은 언제든지'DateTime.current'를 절대적으로 사용하는 것입니다. 시간대가 있습니다. 당신은 아마'(start_at + 1.minute)

+0

@RonanLopes start_at? 날짜가 미래인지 확인하기 전에 날짜의 존재 여부 만 확인합니다. 나는 여전히 꽤 새로운 것을 개발 중이다. 이것을 쓰는 더 좋은 방법이 있을까? – Lenocam

답변

1

실제로 대규모 생산 현장에서 구현 한 또 다른 가능한 제안하는가하는 것입니다 우리에게는이 유예 기간이 2 시간 이었지만 몇 초 만에 끝날 수있었습니다. 귀하의 필요에 따라 다릅니다.

그래서, 내 코드는 같은 것을 보았다 :

def time_in_future 
    if start_at? 
    errors[:base] << 'The Start Date can not be in the past.' if start_at < Time.current + 2.hours 
    end 
end 

이 모델의 장점은 2.hours가 테스트 및 훨씬 쉽게 start_at을 포함하여 모델의 다른 측면을 문제 해결을 할 것이다, 환경에 따라 설정 될 수 있다는 것입니다 .

관련 문제