2017-06-21 7 views
1

roombooking appで作業しています。部屋複数の予約をクロスチェックして日付範囲内で最も混雑した日を見つけよう

roomためexisting bookingsでクロスチェックによりcheck_incheck_out日付の部屋availabilityを検索する新しい予約を行う前に、フィールドavailable_quantityを持っています。この部屋には5と言います。 exceed

check_incheck_out期間の間の任意の日に(つまり合計 rooms_neededは文句を言わない任意の日に 5(available_quantity)を超える)という私の計画は、最初の内にあるすべての予約を見つけている文句を言わないので、私は roomため bookingsを確認する必要があります check_incheck_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を超えることを確認する)highestrooms_neededで一日を見つけることです。私が見つけた問題は、私がall the days within the rangeと考える必要があるということです。誰かがこのbookings配列からそれを見つける方法を教えてもらえますか?それとも、私はこれを複雑にするのですか?ありがとう

NB:基本的に(私はこれをどのように行うことができ、その範囲として)check_out 日にcheck_in日から毎日のbookingsarraytotalling予約を通じてどのようにloopを探して

+0

私の理解によれば、指定された期間(チェックインとチェックアウトの間)に利用可能な部屋を探したいと思っています。私は正しい? –

+0

@GaneshSagareはい..しかし、他の部屋を探していません。ただ1つの部屋。プロパティは、この同じタイプの多くの部屋があります。何を探しているのかは、check_inとcheck_out期間内にどのくらい多くの部屋がいつでも売り切れていることです。部屋数が多いので、check_inとcheck_outの期間内に最高の部屋の要件がある日を見つけて、現在の予約室の要件数に追加することです。アレイから一日分の合計予約で最高の部屋の要求日を見つけるためのルーピングは、私が直面している問題です。 – Abhilash

答えて

0

私はこの権利をundestand場合は、何が必要最高rooms_neededで一日です:

array.order("rooms_needed DESC").first 

そして、それがroom_quantityより低いかどうかを確認することができます。

+0

最高の部屋が必要なものです。しかし、1回の予約ではありません。部屋には1日に複数の予約があります。だから私は毎日room_requirementを追加し、最高の部屋の要件(実際に日ではなくrooms_needed)を見つける必要がありますそれは見つけることが困難である何が... – Abhilash

+0

私はあなたを助けることができるかどうか、あなたのモデルを投稿してください。 –

+0

'部屋has_many予約' '予約belongs_to部屋'。これは実際には単純です。私はその質問に記載されている範囲内にあるすべての予約を見つけました。しかし、毎日毎回繰り返すことで、適切な日付ではなく範囲として詰まってしまうのです。 – Abhilash

関連する問題