【发布时间】:2021-06-22 21:54:59
【问题描述】:
我在这里查看了一些 SO 讨论,至少我还没有看到这种观点。我正在尝试编写代码来计算给定资源的预订,我想在其中找到完成所有预订所需的最少资源数。
让我们以酒店房间为例。鉴于我有以下预订
- 克里斯:7 月 4 日至 7 月 17 日
- 拍摄日期:7 月 15 日至 7 月 19 日
- 泰勒:7 月 10 日至 7 月 11 日
克里斯打来电话,想在他们为朋友预订的房间中添加一些房间,想知道我还有多少房间可用。
Rooms_available = Rooms_in_hotel - Rooms_booked
Rooms_booked 是我遇到问题的地方。似乎大多数问题(实际上是我的代码)只是关注重叠的日期。所以它会做这样的事情:
Booking.where("booking_end >= :start_check AND booking_start <= :end_check", { start_check: "July 4, 2021".to_date, end_check: "July 7, 2021".to_date})
此代码将返回 3。这意味着如果酒店理论上有 5 个房间,我会告诉 Chris 还有 2 个房间可用。
但是,虽然这种计数方法在技术上是准确的,但它忽略了有效重叠的可能性。也就是说,由于泰勒在帕特前 4 天退房,他们都可以被“分配”到同一个房间。所以从技术上讲,我可以为克里斯再提供 3 个房间。
所以我的问题是如何更准确地计算 Rooms_booked 以实现有效重叠(即有效的资源分配)?是否有使用 ActiveRecord 的查询或我在现有查询之上施加什么计算?
【问题讨论】:
标签: ruby-on-rails ruby activerecord