Frage

habe ich RESTFUL Authentifizierung und alles installiert scheint zu funktionieren einwandfrei zu. ich kann und Login anmeldet. Nur so kann ich logout durch Eingabe der URL ist http: // localhost: 3000 / Logout

Wie füge ich einen Logout-Button auf einer Seite? Ich habe versucht, das Hinzufügen einer zur members.rhtml

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>

, die die session_controller.rb verweist aber ich erhalte eine Fehlermeldung „Keine Aktion zu zeigen, reagierte Aktionen:. Erstellen, Löschen und neu“

irgendwelche Gedanken? Thanx

War es hilfreich?

Lösung

Was haben Sie in Ihren Routen-Datei?

Versuchen Sie setzen

map.log_out 'logout', :controller => 'sessions', :action => 'destroy'

in der Routenberechnung.

Dann nur noch

<%= link_to "Sign out", log_out_url %>

für das Zeichen aus Verbindung.

Bearbeiten

Es ist alles darauf an, wie Sie das Routing angeben.

Da hatte man die map.log_out in der Routing, dann die URL http: // localhost: 3000 / Logout url aufgenommen wird, durch diese und weitergeleitet auf die richtige Aktion.

Wenn Sie:

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>

Dies wird erzeugt nur einen Link für Sie von http: // localhost: 3000 / Sitzung . Aber tut es nichts zur Routing. Sie müssen noch die richtigen Routen spezifizieren.

Beachten Sie, dass Rails nicht die Aktion an die URL anhängen zerstören. (Es wird nicht schaffen http: // localhost:. 3000 / session / zerstören ) er geht davon aus, dass, wenn Sie eine Aktion von zerstören, dass Sie es mit einem DELETE http verb werden zu senden. Aus irgendeinem Grunde perfektioniert sein nicht ganz und es tut auch das DELETE-Verb Standard tatsächlich zu senden.

Sie können es zwingen, dies zu tun:

<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>

Das wird noch nicht, es sei denn Sie arbeiten auch Route es richtig. Wenn Sie die folgenden in die Routen setzen:

map.resource :session

Dann Schienen wird das Routing für alle Verben erzeugen und die Standardaktionen für sie angeben, einschließlich DELETE. Rails Routing von außen : Weitere Informationen finden Sie hier .

Die ganze Seite ist lesenswert immer und immer wieder, bis Sie es wirklich verstehen. Routing ist der Schlüssel zum Verständnis Rails!

Für eine einfache Steuerung wie Sessions, ist es einfacher, nur die log_out Route zu spezifizieren und dann Link zu log_out_url ..

(Hoffnung, die Sinn macht, Schlafentzug kriecht in!)

Andere Tipps

Wenn Sie mit devise und Ihr betroffenes Modell ist Benutzer , die elegante Art und Weise ist hier:

<%= link_to 'logout', destroy_user_session_path, method: :delete %>

Es funktioniert, weil:

  • aufgrund HTTP-Methoden sind GET, POST, PUT, PATCH und DELETE, so method: :delete (nicht method: :destroy)
  • verwenden wir destroy_user_session_path mit devise und Benutzer Modell wie üblich, wenn Sie andere Modellnamen definieren wie -Manager Sie gerade ändern Logout Pfad zu destroy_manager_session_path
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top