2016-03-05 2 views
0

Я пытаюсь проверить даты в приложении 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, она показывает правильные ответы.

ответ

0

Я предполагаю, что ограничение по дате не работает так, как вы планировали.

Смотрите, если это работает:

Booking.where { 
    (existing_booking.book_id == new_booking.book_id) & 
    (((existing_booking.to >= new_booking.from) & (existing_booking.to <= new_booking.to)) | 
    ((existing_booking.from <= new_booking.to) & (existing_booking.from >= new_booking.from))) 
} 

В основном это проверка

  1. ли есть запись бронирования для идентичного book_id
  2. ли есть запись бронирования который to между новым бронирования-х from и to
  3. Есть ли запись о бронировании o е которые from между новым бронирования и fromto

Честно говоря, даже если это работает, я думаю, что это создает ужасный запрос SQL ... Я надеюсь, что некоторые другие могут добавить некоторые предложения.

+0

К сожалению, это ведет себя одинаково - оно показывает ошибку, даже если выбранная дата бесплатна и далеко в будущем – Jes

Смежные вопросы