2016-04-08 14 views
0

私はRuby on Railsを使ってイベントサイトを構築しています。利用可能なスペースの数が満たされたときに予約を許可しないように、どのコードを実装して予約を監視できるかわかりません。イベント予約サイト - 過大予約が発生しないようにする方法は?

私は、これは部分的で、イベントを作成するためにsimple_formを使用しています -

<%= simple_form_for(@event) do |f| %> 
    <% if @event.errors.any? %> 
     <h2><%= pluralize(@event.errors.count, "error") %> prevented this  Event from saving:</h2> 
    <ul> 
     <% @event.errors.full_message.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
    </ul> 
<%= f.collection_select :category_id, Category.all, :id, :name, {prompt: "Choose a category"} %> 
<!-- The above code loop assigns a category_id to each event --> 

<%= f.input :image, as: :file, label: 'Image' %> 
<%= f.input :title, label: 'Event Title' %> 
<label>Location</label><%= f.text_field :location, id: 'geocomplete' %></br> 
<label>Date</label><%= f.text_field :date, label: 'Date', id: 'datepicker' %> 
<%= f.input :time, label: 'Time' %> 
<%= f.input :description, label: 'Description' %> 
<label>Number of spaces available</label><%= f.text_field :number_of_spaces, label: 'Number of spaces' %> 
<%= f.input :is_free, label: 'Tick box if Event is free of charge' %> 
<%= f.input :price, label: 'Cost per person (leave blank if free of charge)' %> 
<%= f.input :organised_by, label: 'Organised by' %> 
<%= f.input :organiser_description, label: 'Organiser description' %> 
<%= f.input :url, label: "Link to Organiser site" %> 

<%= f.button :submit, label: 'Submit' %> 

私はイベントや予約モデルとの間の関連性を持っています。特定のイベントの予約を監視できるようにするには、どのようなコードを実装する必要がありますか?私はRailsにはかなり新しくなっているので、これは私にはちょっと困ります。あなたがモデルで検証を使用することができます

答えて

0

、このようなものは、トリックを行うことができますが、新しい予約レコード

validates_inclusion_of :number, :in => 0..10 # Or whatever number you want 

それとも

validates :number, :numericality => {:less_than_or_equal_to => 10 } # Or Whatever number you want 
0

を作成するたびに応じてこれを行うにはいくつかの方法があります。あなたのデータがどのようにモデル化されているか。誰かがイベントの場所を予約する方法について、より多くの情報を提供する必要があります。私はあなたにいくつかのアイデアを与えるためにいくつかの前提を作るつもりです。イベントには多くの予約があり、予約はイベントに属します。イベントにはスペースの総数があります。イベントの1スペース分の予約が行われます。

オーバーブッキングを防止するには、フォームが表示されないようにして、コントローラロジックを追加したくない場合があります。

コントローラーの作成方法(これは、表示されていない予約フォームによって異なります)。フォームのコードの前に鑑み

def create 
    @event = Event.find(params[:event_id) 
    if @event.bookings.count >= @event.total_spaces 
    flash[:warning] = "Sorry, this event is fully booked." 
    redirect_to root_path 
    else 
    #some code to save the booking 
    end 
end 

、いくつかのロジックを追加

<% if @event.bookings.count < @event.total_spaces 
+0

ような別個の予約フォームがありません。上記のフォームは、使用可能なスペースの数を指定するセクションを含むイベントを作成します。私はイベントモデルにnumber_of_spaces属性を持っています。 EventとBookingモデルの関連付けは、上記のとおりです。 –

+0

イベントを予約するには、イベントページの下部にあるボックスがあり、支払いページにユーザーを連れて行くことができますが、余分な予約が問題になる可能性があるため、無料イベントのコードを書く必要がありますそこにも。上記はかなりしっかりしています。 –

+0

同じロジックが適用されます。イベントが完全に予約されている場合、ユーザーを支払いページに連れて行くボックスは表示されません。上記の手助けが得られた場合は、私の答えを受け入れたものとしてマークしてください。どうも。 – margo

関連する問題