我的应用程序中的日期重叠存在很大问题。我有一辆模型车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日...
我对如何解决这个问题没有任何想法
提前感谢大家。
答案 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])
感谢大家的帮助。