我正在尝试创建预约/预约,用户选择开始日期和结束日期两个日期,如何从开始日期和结束日期验证日期,并验证这两个日期之间的日期阻止用户再次选择开始日期,结束日期和日期之间的日期。
数据库
date_start | date_end
14/11/2017 14/18/2017
查看:
日期的日期字段
<%= f.label :'date_start:' %>
<%= f.date_field :date_start %>
<%= f.label :'date_end:' %>
<%= f.date_field :date_end %>
模型
class Reservation < ApplicationRecord
belongs_to: user
validates :date_start, uniqueness: true
validates :date_end, uniqueness: true
end
我使用validates :date_start, uniqueness: true
和validates :date_end, uniqueness: true
但它只检查日期开始和date_end,但它不会检查它们之间的日期。
答案 0 :(得分:0)
validate :check_overlapping
scope :overlaps, ->(date_start, date_end) do
where "((date_start <= ?) and (date_end >= ?))", date_end, date_start
end
def check_overlapping
errors.add(:date_start, 'your error messages') if overlaps(date_start, date_end).any?
end
端
答案 1 :(得分:0)
您必须拥有一个单独的方法来保存复杂的验证码。使用package.json
(没有&#39; s&#39;)来调用它。
如果发现问题,该方法应该向对象添加错误。
这样的事情:
validate :method_name