Bir rezervasyon uygulaması oluşturma. Ben kontrol etmek veya örneğin date_start
ve date_end
tarihini doğrulamak nasılRaylarda oluştururken çakışan tarihleri belirleme
date_start date_end
26-11-2017 27-11-2017
Bunları başlayan ve bitiş tarihi değerlere sahip başka bir rezervasyon yaratacak bir değere sahiptir fakat diğer değerlerle çelişmektedir. Çakışan tarihleri nasıl kontrol edebilirim?
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
Modeli
arasındaki View tarihleri doğrulamak için bu Kullanılan
date_start date_end
25-11-2017 28-11-2017
-
<%= f.label :'date_start:' %>
<%= f.date_field :date_start %>
<%= f.label :'date_end:' %>
<%= f.date_field :date_end %>
Numune zaten/rezerve sözde saklıdır 26 ila 27 büyük tarihi seçerek 26 ila 27 önceden rezerve edildiği için 25 ila 28 eklemesi engellenmelidir.
(Kolayca yukarıdaki tüm olguları da kapsayarak, bir SQL sorgusu yazabilir)? – Imran
@Imran Yukarıdaki tarihler arasındaki çakışmaları kontrol etmek için bir doğrulama ekleyebilmek istiyorum. 26'dan 27'ye kadar olan örnek tarihler önceden rezervasyon yaptırılmış/rezerve edilmiştir, söz gelimi uygulama 25 ila 28'i eklemekten sakınmalıdır, çünkü 26'dan 27'ye kadar olan rezervasyonlar zaten ayrılmıştır. – Pat
Hangi veritabanını kullanıyorsunuz (SQL tabanlı bir çözüm istiyorsanız)? –