0

大学のプロジェクトとしてホテル予約システムを開発したいと考えています。

部屋、予約、顧客用のテーブルがあります。予約テーブルには次のフィールドがあります: room_id 、 customer_id 、arrival、departure 。

予約したい部屋の種類、到着日と出発日を選択できる検索フォームがあります。フォームに入力すると、利用可能な部屋が表示されます。

しかし、日程中に部屋が本当に空いているかどうかを検証する必要があります。複数のモデルにアクセスする必要があると思うので、検証がどのモデルで行われるべきか、誰にも考えがありますか?

ありがとう

4

2 に答える 2

2

私はいくつかのことをします。1 つは、予約ロジックを 1 つのモデルの外に置き、必要なすべてのオブジェクトを入力として取り、すべてのビジネス ロジックをラップするServiceorオブジェクトのようにすることです。Manager

class RoomNotAvailableException < StandardError; end

class ReservationService
  def initialize(room, customer, arrival, departure)
    @room = room
    @customer = customer
    @arrival = arrival
    @departure = departure
  end

  def reserve!
    ActiveRecord::Base.transaction do
      if room_available?
        Reservation.create(:room => @room, :customer => @customer, :arrival => @arrival, :departure => @departure)
      else
        raise RoomNotAvailableException
      end
    end
  end

  private

  def room_available?
    Reservation.where(:room_id => @room.id, :arrival => @arrival, :departure => @departure).exists?
  end

end

次のようなコントローラーで使用します

def create
  # get the objects from params or whatever
  service = ReservationService.new(room, customer, arrival, departure)
  begin
    service.reserve!
    flash[:notice] = "You are booked!" 
    redirect_to('somewhere')
  rescue RoomNotAvailableException => ex
    # whatever you need to do here..
  end
end

2 つ目は、Postgres を使用CHECK CONSTRAINTSしている場合は、チェックを行うために使用できます。2 つの間隔が重ならないようにするため。グーグルで検索する必要がありますが、要点はいくつかの Postgres スレッドで見つけることができます。

http://www.postgresql.org/message-id/20050520162508.GA87868@mighty.grot.org

于 2013-08-06T20:01:29.690 に答える
0

そのなかで何も。

多くの場合、複数のリソースを扱う場合は、リソースを表さない別のコントローラーを作成するのが最善です。これは、それらの状況の 1 つのように聞こえます。

于 2013-08-06T20:02:33.860 に答える