我的应用程序中存在日期重叠的大问题。我有一辆模型车其中: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'
在我的 Controller 中,我根据参数过滤汽车:
@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日。
现在,当我搜索并在表单中将 handover_date 设置为 5 月 10 日并将 return_date 设置为 5 月 16 日时,它显示汽车已准备好创建预订,但这是错误的,因为汽车已经在 5 月 14 日至 5 月 20 日进行预订...
我不知道如何解决这个问题。
预先感谢大家。
最佳答案
我非常接近解决方案。我必须使用这个:
@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])
感谢大家的帮助。
关于ruby-on-rails - Ruby on Rails 日期重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23664409/