Я пытаюсь проверить даты в приложении Rails. Я использую jQuery Datepicker для выбора даты начала и окончания бронирования в библиотеке. Я хочу проверить, прежде чем создавать новое резервирование, что нет никакой другой оговорки в db, которая будет противоречить одному из созданных. Кажется, что независимо от того, какие даты я собираю, он всегда выдает ошибку «Недоступно». Это потому, что я использую Datepicker, а не стандартное поле даты в Rails?Невозможно написать подтверждение для дат в Rails
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 камень. Я также экспериментировал с SQL, как с синтаксисом массива, так и с хешем, но он дает мне ошибки в синтаксисе (даже если он дважды проверен, 100% правильный).
Booking.where { (from >= self.from) & (from <= self.to) }
и все другие испытания возвращают мне даже запись, которую не следует возвращать.
Когда я использую
Booking.where { (from >= self.from) & (from <= self.to) }.pluck(:from).first
и сравнить его с моим self.from, она показывает правильные ответы.
К сожалению, это ведет себя одинаково - оно показывает ошибку, даже если выбранная дата бесплатна и далеко в будущем – Jes