Rails 3:验证时间范围内的时间模型唯一性

时间:2011-05-02 04:05:30

标签: ruby-on-rails validation time model

我的模型有start_time:time和end_time:time字段。我想要做的是检查我的特定预留模型的start_time到end_time范围是否与任何其他预留重叠。

因此,如果在星期三下午4点到6点有预订,那么下午4-6点就不能再预约了。我该怎么做呢?我不太确定如何根据其他Reservation条目中的其他start_time,end_time元组验证时间范围。

2 个答案:

答案 0 :(得分:4)

像这样,也许:

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

答案 1 :(得分:0)

我会避免validates这个特定的需求,只是做一些更像

的东西
before_save :time_check

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

或类似的东西,你需要实际时间检查的帮助吗? 请记住,您可以向时间对象Time.now + (60*60)*hours添加秒数,以获得< and > tests

的范围