2016-04-11 11 views
0
私はシナリオで良いの予約システム

デザイン室予約可否のチェック機能

を設計する上で苦労してる

、各部屋があり、多くのroom_skus、多くの実際の部屋を同じ部屋タイプに属することができます。

しかし、私は可用性を実装する考えはありません。

私が考えることは、新しいモデルRoomAvailablityを追加することです。

ユーザーブックの場合シングルルーム:2016年4月13日

へ2016年4月11日から(room_number 413)私はテーブルの上に3つのレコード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)を予約しようとしたときに10

その後、2016年4月14日

に2016年4月12日から、私はその後、count > 0もしcount = RoomAvailablity.where(room_number:413, occupied_date >= 2016-04-12 and occupied_date <= 2016-04-14)

、部屋のようなクエリを行いますその期間中は利用できません。

私の考えを改善するための推奨はありますか?

ルーム

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 

それとも、代わりにそれを使用することができます。

は、日付範囲のユーザーが1日だけのために部屋を予約した場合

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

、同じ開始日と終了日を使用する上で利用可能なお部屋を探します。

関連する問題