【发布时间】:2016-12-12 09:18:56
【问题描述】:
在我的 rails 应用程序中,我有一个名为 Booking 的模型。用户可以通过选择日期然后选择时间来进行预订。
目前,我有一个验证来检查日期和时间组合是否已经存在,如果存在,则会引发错误。
我遇到的问题是每次预订都会持续一段时间,比如 4 小时。显然,我不能让用户在上午 8.30 进行预订,并在上午 9 点进行另一次预订,尽管我的验证目前允许这样做。
我希望能够检查:
- 是否采用日期和时间组合
- 是否在进行其他预订时进行了新预订。
例如,
用户在 2016 年 12 月 20 日上午 8 点 30 分预订。预订持续 4 小时。
另一位用户尝试在上午 10 点预订 2016/12/201,但由于预订在上午 8.30-12.30(4 小时)的范围内,因此无法通过验证。
这是我目前的验证方法:
def booking_available
errors.add(:date, "and time is not available") unless Booking.where("? = date AND ? = time", date, time).count == 0
end
这是我尝试过的另一个,虽然它只检查预订期的结束:
def booking_available
errors.add(:date, "and time is not available") unless Booking.where("? = date AND ? = time + interval ?", date, time, (bookingtime.to_i.to_s + 'h')).count == 0
end
date 列对应预订日期,time 对应时间,bookingtime 对应预订时长/周期。
我如何才能检查新预订是否在其他预订的范围及其时间范围内?
【问题讨论】:
-
也许存储开始日期和结束日期而不是开始日期和持续时间会更容易,即
2016-12-20 08:30和2016-12-20 12:30。
标签: ruby-on-rails ruby postgresql validation date