room
booking
appで作業しています。部屋複数の予約をクロスチェックして日付範囲内で最も混雑した日を見つけよう
各room
ためexisting bookings
でクロスチェックによりcheck_in
とcheck_out
日付の部屋availability
を検索する新しい予約を行う前に、フィールドavailable_quantity
を持っています。この部屋には5
と言います。 exceed
check_in
と
check_out
期間の間の任意の日に(つまり合計
rooms_needed
は文句を言わない任意の日に
5(available_quantity)
を超える)という私の計画は、最初の内にあるすべての予約を見つけている文句を言わないので、私は
room
ため
bookings
を確認する必要があります
check_in
と
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
は今、私が欲しいのは(それは文句を言わないroom_quantity
を超えることを確認する)highest
rooms_needed
で一日を見つけることです。私が見つけた問題は、私がall the days within the range
と考える必要があるということです。誰かがこのbookings
配列からそれを見つける方法を教えてもらえますか?それとも、私はこれを複雑にするのですか?ありがとう
NB:基本的に(私はこれをどのように行うことができ、その範囲として)
check_out
日にcheck_in
日から毎日のbookings
array
とtotalling
予約を通じてどのようにloop
を探して
私の理解によれば、指定された期間(チェックインとチェックアウトの間)に利用可能な部屋を探したいと思っています。私は正しい? –
@GaneshSagareはい..しかし、他の部屋を探していません。ただ1つの部屋。プロパティは、この同じタイプの多くの部屋があります。何を探しているのかは、check_inとcheck_out期間内にどのくらい多くの部屋がいつでも売り切れていることです。部屋数が多いので、check_inとcheck_outの期間内に最高の部屋の要件がある日を見つけて、現在の予約室の要件数に追加することです。アレイから一日分の合計予約で最高の部屋の要求日を見つけるためのルーピングは、私が直面している問題です。 – Abhilash