1

私は特定の物件の「予約」を行うプロジェクトに取り組んでいます。プロパティが二重に予約されるのを防ぐために、指定された時間枠内に使用できないプロパティの結果を返そうとしています。予約モデルには、:check_inフィールドと:check_out日付フィールドがあります。私の現在のクエリは、指定された範囲のみを含む日付を返しています。

例:Date1 = 04/01/2013 Date2 = 04/15/2013

その範囲内に配置されたすべての予約を返します。ただし、予約が行われた場合、たとえば2013年3月15日から2013年4月5日までの場合、その結果も返す必要があります。

これが私の現在のクエリです:

bookings = Booking.where(check_in: {'$gte' => params[:check_in].to_date, '$lte' =>   params[:check_out].to_date}, check_out: {'$gte' => params[:check_in].to_date,'$lte' => params[:check_out].to_date})
4

2 に答える 2

1

これが最も洗練されたソリューションであるかどうかはわかりませんが、期待される結果を生成するために次のクエリを取得しました。

bookings = current_user.organization.corporate_bookings.or(check_in: (params[:check_in].to_date..params[:check_out].to_date)).or(check_out: (params[:check_in].to_date..params[:check_out].to_date)).or(check_in: {"$lte" => params[:check_in].to_date}, check_out: {'$gte' => params[:check_out].to_date})
于 2013-03-19T05:18:49.403 に答える
1

使用するアルゴリズムは次のとおりです。

( start1 <= end2 and start2 <= end1 )
于 2014-02-21T18:49:34.280 に答える