【问题标题】:How to validate range dates with rails 6如何使用 rails 6 验证范围日期
【发布时间】:2022-10-14 23:02:43
【问题描述】:
你好,我有一个帖子模块,用户可以在其中选择发布他的帖子的日期,我有 2 个字段
start_date:date and expiration_date:date
我想做这样的验证
如果用户选择 start_date = 2022-10-14 和 expiration_date = 2022-10-22,他不能创建另一个介于该范围之间的帖子。
因为我一次只能发布 1 个帖子,所以通过此验证,我将强制用户选择不在此选定范围日期之间的任何其他日期。
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-6
ruby-on-rails-6.1
【解决方案1】:
只需检查是否没有其他帖子在到期日期之前开始并在开始日期之后结束。如果您要更新现有帖子,请在支票中排除此帖子的 ID。 (帖子不应该阻止自己改变)。
这将捕获与当前帖子完全或部分重叠的帖子,或者在当前帖子中开始和结束的帖子。
validates :date_range
def date_range
if user.posts.where.not(id: id).where('start_date < ? AND expriration_date > ?', expiration_date, start_date).any?
errors.add(:start_date, 'there is already a post that overlaps these dates')
end
end