两个日期栏之间的验证

时间:2017-11-14 01:16:32

标签: ruby-on-rails

我正在尝试创建预约/预约,用户选择开始日期和结束日期两个日期,如何从开始日期和结束日期验证日期,并验证这两个日期之间的日期阻止用户再次选择开始日期,结束日期和日期之间的日期。

数据库

 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: truevalidates :date_end, uniqueness: true但它只检查日期开始和date_end,但它不会检查它们之间的日期。

2 个答案:

答案 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