ruby-on-rails – 使用Ruby on Rails进行时间可用性比较
我希望有一个多个对象的可用性表,并进行比较.例如,承租人将搜索租赁单位,该单位可在星期一下午1-3点开始使用.
要做到这一点,我想我会将一周划分为30分钟的时段,并为每个时段分配一个ID.然后日期范围将搜索相应的时隙ID. 然而,那时我需要5040条记录来跟踪每个时间段,而且我对于手动维护它并不太兴奋(在Ruby中我不知道如何去做).是否有一个更优雅的方法,通过使用日期时间,或一些Rails插件,将执行类似于我想要的东西,但更容易? 关键要求是它必须比较多个分开的时间块. 编辑:如果可以有一种比较多个时间块来查看最佳匹配的方法,那将是一个奖励.例如,如果我想在星期一,星期三和星期五租用摄像机,并且一天有一台摄像机可用,而另一台摄像机只有两天可用,我希望能够对摄像机进行比较和排序.最佳匹配的基础. 解决方法
您不需要拥有如此复杂的模型.您只需要一张表格,其中显示租赁单位不可用的时间块,换句话说,就是每个出租单位的预订时间表.例如:
create table BOOKING ( rental_unit_id int,start_datetime date,end_datetime date ) 现在,如果您想获得可用于整个给定时间段的租赁单元列表,请将@Arrive称为@Depart,那么您只需运行如下查询: select R.rental_unit_id -- (and anything else you want) from RENTAL_UNIT R where not exists ( select B.rental_unit_id from BOOKING B where B.rental_unit_id = R.rental_unit_id and end_datetime > @Arrive and start_datetime < @Depart ) 这个查询说给我一个租赁单位列表,其中没有预订与感兴趣的搜索周期重叠(从@Arrive到@Depart).请注意,您可以使用< = @Depart,具体取决于您是否希望在预订期间拥有包容性或独占端点. 编辑:处理多个可用性块 @OP增加了对多个可用性块的要求.如果您在多天内租用设备,那么@Arrive和@Depart就会在不同的日期发生.如果在@ OP的例子中,多天在中间有间隙 – 可能是设备被退回并可以租给其他人 – 那么你只需要添加额外的不存在条款 – 每个独立块一个可用性.只需“和”他们在一起,您就会找到所有所需时间段中可用的出租单位.更好或更差的比赛的概念并不真正适用.租赁单元可用或不可用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |