2016-05-03 17 views
0

Ich mache derzeit eine Website in Rails, die dem Benutzer erlauben wird, zu erstellen und Konto und dann, wenn eingeloggt er/sie wird eine Liste aller "Zimmer" in der Datenbank erhalten. Und dann kann der Benutzer einen der Räume buchen. Wie ein Buchungssystem.Raumbuchungssystem Neuling Logik Schienen

Wenn der Benutzer sich anmeldet, wird er zuerst zum Controller Booker Index umgeleitet. Dadurch werden alle Räume aus der Datenbank abgerufen und die Informationen in einer Tabelle angezeigt.

Die Modellsituation ist aufgebaut wie der Benutzer hat has_many Reservierungen, und die Reservierung gehört zu Benutzer.

Also was ich tun möchte ist, dass neben der Tabelle (kann in der gleichen Zeile sein) sollte es einen Klick-Button sein. Und wenn der Benutzer auf die Schaltfläche klickt, werden die Reservierungen erstellt und mit dem Benutzer verknüpft, ohne die aktuelle Seite zu verlassen. Atm das ist, was ich mit (in der index.html.erb) kam

<%= form_for(@new_reservation) do |new_res| %> 
    <% @all_rooms.each do |r| %> 
     <tr> 
     <td><%= r.room %></td> 
     <td><%= r.room_size %></td> 
     <td><%= r.building %></td> 
     <td><%= r.room_description %></td> 
     <td><%= new_res.submit "Create" %></td> 
     </tr> 
    <% end %>   
<% end %> 

und mein Controller sieht aus wie

class BookerController < ApplicationController 
    before_action :require_user, only: [:index, :show] 

    def index 
    @new_reservation = Reservation.new 
    @all_rooms = Room.all 
    end 

    def create 
    end 
end 

und Strecke

Rails.application.routes.draw do 
#Log in/Logout functionality 
get '/login' => 'sessions#new' 
post 'login' => 'sessions#create' 
delete 'logout' => 'sessions#destroy' 
#The start screen 
root 'welcome#index' 
#The signup 
get '/signup' => 'users#new' 
get '/book' => 'booker#index' 
resources :users 
resources :reservations 
+2

Was ist Ihre Frage? – sjagr

+0

Wie erreiche ich das so kann ich auf der/Buchseite aus der Zimmerliste eine von ihnen buchen. Die Reservierungen werden also erstellt und mit dem Benutzer verknüpft. Ohne die Seite zu verlassen, möchte ich immer noch, dass sich der Benutzer auf dieser Seite befindet. Wenn er eingeloggt ist, wird er zur Hauptseite. – Labba

Antwort

1

Sie benötigen ein paar Dinge, um dies zu erreichen:

  • Wenn Sie Ihre u ser auf der Seite zu bleiben, müssen Sie Ihre Form asynchron machen mit remote: true
  • Wenn Sie die Reservierung in Ihrer BookerController#create Methode zu erstellen, muss es mit einer HTTP POST
  • Eine einfachen, unkomplizierten Art und Weise zugänglich sein Dazu ein Formular für jede mögliche Reservierung Ihrer Meinung zu haben, ist der Benutzer möglicherweise

Arbeitsbeispiel tun:

app/views/Disponent/index.html.erb

Hier

, ersetzen current_user.id durch was auch immer gibt Ihnen die aktuell angemeldeten Benutzer

app/controllers/booker_controller.rb

class BookerController < ApplicationController 

    def index 
    @all_rooms = Room.all 
    end 

    def create 
    new_reservation = Reservation.new(reservation_params) 
    new_reservation.save 
    respond_to do |format| 
     format.json { head :no_content } 
    end 
    end 

    private 
    def reservation_params 
    params.require(:reservation).permit(:room_id, :user_id) 
    end 
end 

app/config/routes.rb

Rails.application.routes.draw do 

    get '/book' => 'booker#index' 
    post '/book' => 'booker#create' 

end 
+0

Vielen Dank! Es hat super funktioniert! – Labba

+0

Gern geschehen! – babgyy

0

Und wenn Der Benutzer klickt auf die Schaltfläche, auf der die Reservierungen erstellt und mit dem Benutzer verknüpft werden, ohne die aktuelle Seite zu verlassen.

Sie müssen lernen, wie Sie eine Ajax-Anfrage in Rails machen.

http://ericlondon.com/2014/03/13/rails-4-submit-modal-form-via-ajax-and-render-js-response-as-table-row.html

Grundsätzlich müssen Sie so etwas wie dieses

<%= form_for(@new_reservation, remote: remote) do |new_res| %> 

Welche Daten asynchronosly senden, können Sie die Reservierung erstellen und machen eine Ansicht für die Anzeige