У меня есть две модели дома и бронирования. Все в порядке с проверкой booking_date. Но когда я пытаюсь обновить или создать мультибронирование в том же запросе. Проверка не может проверить недействительное бронирование в тех же параметрах запроса.
Приведем пример, предположим, что таблица бронирования пуста.
params = { :house => {
:title => 'joe', :booking_attributes => [
{ :start_date => '2012-01-01', :finish_date => '2012-01-30 },
{ :start_date => '2012-01-15', :finish_date => '2012-02-15 }
]
}}
Второе бронирование также сохраняется, но его start_date находится между первым интервалом бронирования. Когда я сохраняю их один за другим, проверка работает.
class House < ActiveRecord::Base
attr_accessible :title, :booking_attributes
has_many :booking
accepts_nested_attributes_for :booking, reject_if: :all_blank, allow_destroy: true
end
class Booking < ActiveRecord::Base
belongs_to :house
attr_accessible :start_date, :finish_date
validate :booking_date
def booking_date
# Validate start_date
if Booking.where('start_date <= ? AND finish_date >= ? AND house_id = ?',
self.start_date, self.start_date, self.house_id).exists?
errors.add(:start_date, 'There is an other booking for this interval')
end
# Validate finish_date
if Booking.where('start_date <= ? AND finish_date >= ? AND house_id = ?',
self.finish_date, self.finish_date, self.house_id).exists?
errors.add(:finish_date, 'There is an other booking for this interval')
end
end
end
Я гуглил почти 2 часа и ничего не мог найти. Каков наилучший подход к решению этой проблемы?
Некоторые ресурсы