通过交叉检查多个预订来查找日期范围内最繁忙的一天

时间:2017-06-21 18:26:51

标签: ruby-on-rails ruby

正在处理room booking个应用。在进行新的预订之前,将通过availability与房间交叉检查来搜索check_incheck_out日期的existing bookings个房间

每个room都有一个字段available_quantity。让我们为这个房间说5。因此,我必须确保在bookingsroom期间之间的任何一天exceed不会check_in的{​​{1}}(换句话说,总数{{1}在任何给定的日子里都不会超过check_out

我的计划是首先查找rooms_needed5(available_quantity)

内的所有预订
check_in

这样可以正常工作,因为我将按照预期<{1}}低于输出

check_out

所以基本上这些是#find records with check_ins before the new checkout date && check_outs after the new checkin date scope :bookings_between, lambda {|start_date, end_date| where("check_in < ? AND check_out > ?", end_date, start_date )} 现在的主要价值。

array

现在我想找的是bookings=#<ActiveRecord::Relation [#<Booking id: 20, room_id: 29, buyer_id: 11, rooms_needed: 1,check_in: "2017-06-20", check_out: "2017-06-23">, #<Booking id: 21, room_id: 29, buyer_id: 11,rooms_needed: 1, check_in: "2017-06-20", check_out: "2017-06-23">, #<Booking id: 22, room_id: 29, buyer_id: 11,rooms_needed: 2, check_in: "2017-06-22", check_out: "2017-06-25">, #<Booking id: 23, room_id: 29, buyer_id: 11, rooms_needed: 1, check_in: "2017-06-22", check_out: "2017-06-25">]> array的一天(以确保它不会超过Range: 2017-06-20 .. 2017-06-23, rooms_needed: 1 Range: 2017-06-20 .. 2017-06-23, rooms_needed: 1 Range: 2017-06-22 .. 2017-06-25, rooms_needed: 2 Range: 2017-06-22 .. 2017-06-25, rooms_needed: 1 )。我发现的问题是我需要考虑highest。有人能告诉我如何从这个rooms_needed数组中找到它?或者我复杂化了吗?谢谢

  

注意:基本上在room_quantity all the days within the rangebookings寻找loop的方法   从bookings天到array的每一天的totalling次预订   一天(作为一个范围我该怎么做)

1 个答案:

答案 0 :(得分:0)

如果我没有理解这一点,那么您需要的是具有最高rooms_needed的日期:

array.order("rooms_needed DESC").first

稍后您可以检查它是否低于room_quantity