我需要实现预订功能,并确保预订不会在Rails应用程序中重叠。
cover?
和between?
方法不是我所需要的。与同一模型上的其他潜在范围相比,我必须确保时间范围的唯一性,并且要有效地做到这一点。
我认为可以用overlaps?
。问题是,对于这样的内容,它返回TRUE:
(1..5).overlaps?(5..9)
=> true
如果我比较在另一个开始时结束的预订(3:30 - 4:00
与4:00 - 4:30
),它会说它们确实重叠,但它们在技术上并不重叠。这是个问题,对吧?
ValidatesOverlap似乎可以处理这个问题,包括边缘重叠。
有什么建议吗?
def overlap?(x,y)
(x.first - y.end) * (y.first - x.end) > 0
end
。问题是Interval
使用了>=
,正如你在"测试两个日期范围在Ruby或Rails中是否重叠"中看到的那样。
对于您的场景,为什么我们必须包含结束时间?毕竟,预订在那个时候结束了,从那个时候开始就有空位了。所以下面应该是有意义的。
(1...5).overlaps?(5...9)