【发布时间】:2017-11-19 12:38:15
【问题描述】:
制作预订应用程序。如何检查或验证日期,例如 date_start 和 date_end 的值为
date_start date_end
26-11-2017 27-11-2017
我将创建另一个具有这些开始和结束日期值但与其他值冲突的预订。如何检查冲突的日期?
date_start date_end
25-11-2017 28-11-2017
用它来验证两者之间的日期
型号
validate :no_reservation_overlap
scope :overlapping, ->(period_start, period_end) do
where "((date_start <= ?) and (date_end >= ?))", period_end, period_start
end
private
def no_reservation_overlap
if (Reservation.overlapping(date_start, date_end).any?)
errors.add(:date_end, 'it overlaps another reservation')
end
end
查看 - 选择日期
<%= f.label :'date_start:' %>
<%= f.date_field :date_start %>
<%= f.label :'date_end:' %>
<%= f.date_field :date_end %>
样品日期 26 到 27 已经被预订/保留,它必须防止插入 25 到 28,因为 26 到 27 已经被预订。
【问题讨论】:
-
你的代码有什么问题?
-
@Imran 我希望能够添加验证以检查上述日期之间的冲突。示例日期 26 到 27 已被预订/保留,据说应用程序必须防止插入 25 到 28,因为 26 到 27 已经被预订。
-
您使用的是什么数据库(如果您想要基于 SQL 的解决方案)?
-
@AndrewMarshall mysql
标签: ruby-on-rails date