2011-05-02 5 views
1

내 모델에는 start_time : time 및 end_time : time 필드가 있습니다. 제가 할 수 있기를 원하는 것은 특정 예약 모델의 start_time to end_time 범위가 다른 예약과 겹치지 않는지 확인하는 것입니다.레일 3 : 시간 범위 내의 시간의 모델 유효성 확인

그래서 수요일 2시에 오후 4 시부 터 6 시까 지 예약하면 오후 4-6시에 언제든지 다른 예약을 할 수 없습니다. 이 일을 어떻게 하죠? 다른 Start_time, end_time 튜플에 대해 다른 예약 항목의 시간 범위를 확인하는 방법은 확실하지 않습니다. 당신이 실제 시간 검사에 도움이 필요합니까 나는 더 그런

before_save :time_check 

def time_check 
    if #time in range 
     #reject 
    else 
     #accept! 
end 

이나 뭐 같은 필요성이 특정에 대한 validates을 피하고, 단지 만들 것

답변

4

와 범위를 얻을 수있는 시간 객체 Time.now + (60*60)*hours에 초를 추가 할 수 있습니다 기억

def intersects?(reservation) 
    to = reservation.end_time 
    from = reservation.start_time 
    Reservation.where('start_time > ? OR end_time < ?', to, from).count > 0 
end 
+0

이것은 과거와 미래의 날짜 사이 예약에서 작동하지 않습니다. – tonymarschall

+0

나는 그렇게 생각한다. 예제를 제공해 줄 수 있습니까? – moritz

+0

12:00 - 13:00 및 15:00 - 16:00 사이에 예약이 있고 14:00 - 15:00 예약을 예약하려는 경우 Reservation.where ('start_time> 14:00 OR end_time <15 : 00 ')가 포함됩니다. – tonymarschall

0

? 그냥 당신이 아마,이 같은 <and> tests

+0

난 그냥 다른에 시간에 내 시간을 확인하는 방법을 잘 모르겠어요 항목. 그 말은, x와 y가 시작되는 엔트리가 있다면, x와 y가 무엇인지 어떻게 알 수 있습니까? 기본적으로 내 예약 테이블의 모든 항목을 검사하는 방법을 어떻게 작성합니까? – CCSab

+2

왜 유효성 검사를 피하겠습니까 ?? 그는 제출 된 데이터의 유효성을 검사하고 있습니다 ... – Mischa