DateRangeOverlapValidator类 def验证(记录)
返回,除非record.start_date
范围=范围(记录)
记录= record.send(@options [:records])如果record.respond_to? @options [:records]
record.errors.add(:start_date,'to'+:end_date.to_s +'范围不能与相关记录重叠')
date_overlap?(记录,范围,记录)
结束 def date_overlap?(记录,范围,记录)
#对于每个现有相关记录,已针对日期范围重叠验证了测试记录
#不要在编辑过程中对记录进行测试
records.each {| rec |如果rec!= record && range.overlaps?(range(rec))},则返回true
#没有与任何现有记录重叠
假
结束 def范围(rec)
#给定记录的返回日期范围
#TODO:如果缺少start_date会出错?
返回,除非rec.start_date
date_start = rec.start_date
date_end = rec.end_date
date_end = date_end.nil? ? MAX_DATE:date_end
date_start..date_end
结束
结束