Ruby on Rails日期重叠

时间:2014-05-14 20:22:41

标签: ruby-on-rails ruby datetime ruby-on-rails-4

我的应用程序中的日期重叠存在很大问题。我有一辆模型车which: has_many :reservations 和型号预订:

belongs_to :car

我正在构建搜索表单,以帮助查找在指定日期范围内没有预订的汽车。我的搜索表单如下:

= horizontal_simple_form_for :cars, {url: cars_path, method: :get} do |f|
  = f.input :handover_date, as: :string, label: false
  = f.input :return_date, as: :string, label: false
  = f.submit class: 'btn btn-success' 

在我的控制器中,我根据params过滤汽车:

@cars = Car.joins(:reservations).where.not("reservations.reception_time <= ? AND reservations.return_time >= ?", params[:cars][:handover_date], params[:cars][:return_date])

此代码基于(Determine Whether Two Date Ranges Overlap
但是这段代码不能正常工作 在我的数据库中,我有一辆车和一辆预订这辆车。预订时间为5月14日至5月20日 现在当我搜索并将我的表格设置为transit_date到5月10日并且返回日期到5月16日时,它向我显示Car已准备好创建预订,但这是假的,因为Car已经预订了5月14日到5月20日...
我对如何解决这个问题没有任何想法 提前感谢大家。

1 个答案:

答案 0 :(得分:2)

我非常接近解决方案。我必须用这个:

@cars = Car.joins(:reservations).where.not("reservations.reception_time <= ? AND reservations.return_time >= ?", params[:cars][:return_date], params[:cars][:handover_date])

而不是:

@cars = Car.joins(:reservations).where.not("reservations.reception_time <= ? AND reservations.return_time >= ?", params[:cars][:handover_date], params[:cars][:return_date])

感谢大家的帮助。