如何使用下面的代码验证每个用户的日期?当我以其他用户身份登录时,我无法创建具有相同日期的预订。我有 user_id 引用表 users 中的 id。我希望能够使 date_start 和 date_end 仅对用户唯一,并且仍然能够与不同的用户创建相同的日期。
获取更多信息的链接:两个日期轨道之间的验证 https://stackoverflow.com/questions/47276147/validation-between-two-date-rails
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
我猜你可以尝试将其添加到你的验证中:
validate :no_reservation_overlap, :uniqueness => { :scope => :user_id }
不确定这是否适合您,但您应该尝试一下。祝你好运!
EDIT:
我建议采用不同的方法:
validate :no_reservation_overlap
def no_reservation_overlap
if (Reservation.where("(? BETWEEN date_start AND date_end OR ? BETWEEN date_start AND date_end) AND user_id = ?", self.date_start, self.date_end, self.user_id).any?)
errors.add(:date_end, 'it overlaps another reservation')
end
end
我想这应该可行,请尝试一下
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)