2016-04-11 38 views
0

我掙扎在設計一個良好的預訂系統設計室預留可用性檢查功能

在此場景中,每個房間都有許多room_skus,

每個room_sku記錄表示,因爲我們一間物理室

可以有多個房間屬於同一房型。

但是,我沒有任何想法來實現可用性。

我能想到的是添加一個新的模型RoomAvailablity。

如果用戶書單間(room_number:413),從2016年4月11日至2016年4月13日

我會在桌子上RoomAvailablity

  • {room_sku_id創建三個記錄: 413,occupied_date:2016年4月11日}
  • {room_sku_id:413,occupied_date:2016年4月12日}
  • {room_sku_id:413,occupied_date:2016年4月13日}

然後,當另一個用戶試圖預訂(room_number:413),從2016年4月12日至2016年4月14日

我會做出這樣count = RoomAvailablity.where(room_number:413, occupied_date >= 2016-04-12 and occupied_date <= 2016-04-14)

如果count > 0,然後房間查詢在此期間不可用。

有沒有什麼好的建議來改善我的想法?

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 

回答

1

你靠近,新增開始日期和結束日期到每個可靠性。

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

查詢

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

或者你可以使用它。

查找日期範圍

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

如果用戶已經預訂到房間的只有1天,使用相同的開始和結束日期有空房間。