我的模型有start_time:time和end_time:时间字段。我想要做的是检查我的特定Reservation模型的start_time到end_time范围是否与其他任何预订不重叠。Rails 3:验证时间范围内的时间模型唯一性
所以如果从第二个星期三下午4-6点开始预订,那么从下午4-6点起不能再有任何预约。我会如何去做这件事?我不太确定如何验证时间范围与来自其他预定条目的其他start_time,end_time元组。
我的模型有start_time:time和end_time:时间字段。我想要做的是检查我的特定Reservation模型的start_time到end_time范围是否与其他任何预订不重叠。Rails 3:验证时间范围内的时间模型唯一性
所以如果从第二个星期三下午4-6点开始预订,那么从下午4-6点起不能再有任何预约。我会如何去做这件事?我不太确定如何验证时间范围与来自其他预定条目的其他start_time,end_time元组。
这样的,也许:
def intersects?(reservation)
to = reservation.end_time
from = reservation.start_time
Reservation.where('start_time > ? OR end_time < ?', to, from).count > 0
end
我会避免validates
这个特定的需求,而只是让更多的东西一样
before_save :time_check
def time_check
if #time in range
#reject
else
#accept!
end
或类似的东西,你需要与实际时间检查帮助吗? 只要记住你可以添加秒的时间对象Time.now + (60*60)*hours
得到一个范围内<and> tests
这对于过去和未来的日期之间的预定不起作用。 – tonymarschall 2012-05-03 11:58:38
我认为它的确如此。你能提供一个例子吗? – moritz 2012-05-03 13:49:38
如果您在12:00至13:00之间预订并且从15:00至16:00预订并且想要预订14:00至15:00 Reservation.where('start_time> 14:00或end_time <15: 00')会计数。 – tonymarschall 2012-05-03 14:58:07