2016-03-25 6 views
0

Ich versuche eine Reservierungsanwendung zu machen, die es Benutzern erlaubt, ein Konto zu buchen und dann eine Reservierung zu buchen, aber Personen, die kein Konto haben, sollten auch in der Lage sein, eine Reservierung zu buchen.Rails geschachtelt routing abhängig von current_user

Bisher habe ich ein Benutzer, Reservierung und Bestellung Modelle. Ich habe eine Eins-zu-eins-Verbindung zwischen Reservierung und Bestellung hergestellt. Ab sofort ist meine routes.rb wie folgt:

resources :reservations do 
resources :orders 
end 

Diese Zuordnung funktioniert gerade jetzt in meiner Anwendung. Ich bin auch in der Lage, einen Benutzer in meiner Anwendung zu erstellen und sie angemeldet zu haben, aber ich habe diese beiden noch nicht beigetreten.

Ich weiß, dass ich eine Eins-zu-viele-Beziehung zwischen Benutzer und Reservierung haben muss, dass 'has_one' Order, aber wo ich Schwierigkeiten habe vorwärts zu bewegen versucht zu denken, wie ich die User-Ressource hinzufügen kann Es spielt keine Rolle, ob ein Besucher der Anwendung ein Konto hat oder nicht. Ich bin mir nicht sicher, wie die Controller und Routen sein würden, wenn ich in diese Richtung gehen würde.

Wenn ich folgendes zu meinem routes.rb hinzufügen:

resources :users do 
resources :reservations do 
    resources :orders 
end 
end 

Ich glaube, ich würde immer einen Benutzer haben, um eine Reservierung zu erstellen. Ich bin mir nicht sicher, wie ich vorgehen soll, wenn der Benutzer nicht angemeldet ist oder kein Konto hat.

Ich habe versucht, nach einer Lösung zu suchen, aber ich bin nicht auf etwas gestoßen, das scheint, als wäre es in meinem Fall hilfreich.

Anleitung wäre sehr zu schätzen.

+0

wenn Sie erklären, was Sie erreichen wollen, dann könnten wir – sureshprasanna70

Antwort

0

Wenn Sie keinen Benutzer benötigen eine Reservierung zu schaffen, Sie wollen nicht zu nisten /reservations unter /users - tun, dass ein :user_id im Weg erfordert, die eindeutig haben Sie nicht. Lassen Sie einfach beide auf der obersten Ebene:

resources :users 
resources :reservations 

Ihr Benutzerreservierungen viele haben immer noch, auch wenn die URL nicht vollständig widerspiegeln, dass (und mit allen Benutzern, Reservierungen und Bestellungen, Ihre Wege sind immer ziemlich tief). Wenn Sie einen benutzerspezifischen Reservierungsindex möchten, können Sie immer noch eine Sekunden Route unter den Benutzern die Art und Weise verschachtelt hinzufügen Sie bereits haben:

resources :users do 
    resources :reservations 
end 

resources :reservations 

Dann bewerben sowohl auf /reservations reagieren und /users/:user_id/reservations und die Logik in Ihrem ReservationsController kann params[:user_id] anwenden, wenn es vorhanden ist:

class ReservationsController < ApplicationController 
    def index 
    scope = Reservation 
    scope = scope.where(user_id: params[:user_id]) if params[:user_id] 
    @reservations = scope.all 
    end 
end 
+0

Vielen Dank helfen! Ich wusste nicht, dass ich solche Routen haben könnte! Könnten Sie jedoch erklären, was die .unscoped für das Reservierungsmodell tut? Ich würde es sehr begrüßen. Den Rest verstehe ich. – ayounis90

+0

Sie wissen was, ich benutzte es in einer Art Off-Label-Art, um zu garantieren, dass wir mit einem Abfrage-Objekt arbeiten, aber sowohl 'Reservierung' als auch das Ergebnis von' wo' antworten auf 'alle', also wir brauche es nicht. Sein eigentlicher Zweck ist es, alle 'default_scope's zu entfernen, die Sie möglicherweise im Modell festgelegt haben. –