【问题标题】:Mongoid and Rails overlapping date rangesMongoid 和 Rails 重叠的日期范围
【发布时间】:2013-03-18 20:23:01
【问题描述】:

我正在开展一个项目,该项目为特定属性放置“预订”。为了防止属性被重复预订,我试图返回在给定时间范围内不可用的属性的结果。在我的预订模型中,我有 :check_in 和 :check_out 日期字段。我当前的查询只返回包含给定范围的日期。

例如: 日期 1 = 04/01/2013 日期 2 = 2013 年 4 月 15 日

返回放置在该范围内的所有预订。但是,如果进行了预订,比如说在 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})

【问题讨论】:

标签: ruby-on-rails ruby mongoid


【解决方案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})

【讨论】:

    【解决方案2】:

    你要使用的算法是:

    ( start1 <= end2 and start2 <= end1 )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多