【发布时间】:2016-03-05 14:16:07
【问题描述】:
我正在尝试验证我的 Rails 应用程序中的日期。我正在使用 jQuery Datepicker 来选择在图书馆预订的开始和结束日期。我想在创建新预留之前检查数据库中是否没有任何其他预留,这将与正在创建的预留冲突。似乎无论我选择什么日期,它总是会抛出错误“不可用”。这是因为我使用的是 Datepicker,而不是 Rails 中的标准 date_field?
if Booking.where {
(book_id == self.book_id) &
(((from <= self.from) & (to >= self.from)) |
((from >= self.from) & (to <= self.to)) |
((from >= self.from) & (from < self.to) & (to >= self.to)))
}.any?
errors.add(:from, "Not available")
end
我也试过了:
def uniqueness_of_date_range
errors.add(:from, "is not available") unless Booking.where { (from >= self.from) & (from <= self.to) }.count == 0
errors.add(:to, "is not available") unless Booking.where { (to >= self.from) & (to <= self.to) }.count == 0
end
我正在使用 squeel gem。我还尝试了 SQL,包括数组和哈希语法,但它给了我关于语法的错误(即使它经过双重检查,100% 正确)。
Booking.where { (from >= self.from) & (from <= self.to) }
所有其他的试验都给了我不应该归还的记录。
当我使用时
Booking.where { (from >= self.from) & (from <= self.to) }.pluck(:from).first
并与我的self.from比较,它显示正确的答案。
【问题讨论】:
标签: ruby-on-rails squeel