2016-04-11 21 views
0
Ben senaryoda iyi rezervasyon sistemi

Tasarım Odası rezervasyon durumunu kontrol fonksiyonu

tasarlamaya mücadele ediyorum

, her odada vardır birçok room_skus, birçok gerçek oda aynı oda tipine ait olabilir. Bununla birlikte, kullanılabilirliği uygulamak konusunda hiçbir fikrim yok.

Düşünebildiğim şey, yeni bir ModelAvailablity modeli eklemek. 2016/04/13

için 2016-04-11 den masanın RoomAvailablity

  • {room_sku_id üç kayıtları oluşturur: Tek bir oda (413 room_number) Bir kullanıcı kitaplarında ise

    : 413, occupied_date: 2016/04/11}
  • {room_sku_id: 413, occupied_date: 2016/04/12}
  • {room_sku_id: 413, occupied_date: 2016/04/13}
Başka bir kullanıcı (room_number: 413) kitaba çalıştığında 10

Sonra 2016/04/14

için 2016-04-12 den Sonra count > 0 Eğer count = RoomAvailablity.where(room_number:413, occupied_date >= 2016-04-12 and occupied_date <= 2016-04-14)

, oda gibi bir sorgu yapacak süre boyunca mevcut değildir.

Düşüncemi geliştirmek için iyi bir öneri var mı?

Oda

HAS_MANY RoomSku 

id: integer 
name:string 
type:string (Double, Single, Triple) 
description:string 

RoomSku

belong_to: Room 
HAS_MANY: RoomAvailablity 
id: integer 
name:string 

RoomAvailablity

belong_to: RoomSku 
occupied_date: date 
room_sku_id: integer 

cevap

1

Sen yakınsın, her kullanılabilirliği için bir başlangıç ​​ve bitiş tarihini ekleyin.

belong_to: RoomSku 
start_date: date 
end_date: date 
room_sku_id: integer 

Sorgu

RoomAvailablity.where(room_number: 413).where("start_date <= ? AND end_date >= ?", end_date, start_date).count 

Yoksa alternatif kullanabilirsiniz.

tarih aralığında kullanıcı sadece 1 gün için oda rezervasyonu ise

RoomAvailability.where.not("start_date <= ? AND end_date >= ?", end_date, start_date) 

, aynı başlangıç ​​ve bitiş tarihini kullanmak üzerinde kullanılabilir Odaları bulun.