2016-04-08 2 views
0

Ich baue eine Event-Site mit Ruby on Rails und bin mir nicht sicher, welchen Code ich implementieren kann, um die Buchungen zu überwachen, um sicherzustellen, dass ich keine Buchungen zulasse, wenn die Anzahl der verfügbaren Plätze besetzt ist.Event Booking Site - Wie kann eine Überbuchung verhindert werden?

ich simple_form bin mit Ereignissen zu erstellen, ist dies der Teil -

<%= 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' %> 

ich eine Verbindung zwischen dem Event und Buchung Modell. Welchen Code soll ich implementieren, um sicherzustellen, dass die Buchungen für eine bestimmte Veranstaltung überwacht werden können? Ich bin ziemlich neu bei Rails, also hat mich das ein wenig ratlos gemacht.

Antwort

0

Sie können Validierung Modell verwenden, so etwas wie dies kann den Trick tun, wenn Sie einen neuen Buchungsrekord

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

Oder

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

Es gibt ein paar Möglichkeiten, erstellen Sie diese je zu tun wie Ihre Daten modelliert werden. Und Sie müssen mehr Informationen darüber bereitstellen, wie jemand einen Platz auf der Veranstaltung bucht. Ich werde einige Annahmen machen, um Ihnen einige Ideen zu geben. Ein Event hat viele Buchungen, eine Buchung gehört zu einem Event. Das Ereignis hat eine Gesamtzahl von Leerzeichen. Eine Buchung für 1 Platz auf der Veranstaltung gemacht.

Um eine Überbuchung zu vermeiden, sollten Sie verhindern, dass das Formular angezeigt wird, und eine Steuerungslogik hinzufügen.

In der Controller erstellen Methode (das hängt von Ihrem Buchungsformular, das Sie nicht angezeigt haben).

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 

In der Ansicht vor dem Codeform, fügen Sie einige Logik

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

Es gibt keine separate Buchungsformular als solche. Das obige Formular erstellt das Ereignis einschließlich eines Abschnitts zum Festlegen der Anzahl der verfügbaren Felder. Ich habe ein Attribut number_of_spaces in meinem Ereignismodell. Die Verknüpfung zwischen den Ereignis- und Buchungsmodellen ist wie oben beschrieben. –

+0

Um eine Veranstaltung zu buchen, gibt es eine Box am Ende der Veranstaltungsseite, die einen Nutzer zur Zahlungsseite führt, aber wie Sie vorschlagen, muss ich Code für kostenlose Veranstaltungen schreiben, da Überbuchungen ein Problem darstellen können da auch. Das oben genannte sieht ziemlich solide aus. –

+0

Die gleiche Logik gilt, wenn das Ereignis ausgebucht ist, zeigen Sie nicht die Box, die Benutzer zur Zahlungsseite führt. Wenn das obige hilfreich ist, markieren Sie bitte meine Antwort als akzeptiert oder als positiv. Danke. – margo

Verwandte Themen