Domanda

Ho installato RIPOSANTE di autenticazione e tutto sembra funzionare bene.posso iscrizione e login.l'unico modo che ho logout digitando l'URL http://localhost:3000/logout

come faccio ad aggiungere un pulsante logout su una pagina?ho provato ad aggiungere uno per i membri.rhtml

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

a cui fa riferimento il session_controller.rb ma mi da un errore "Nessuna azione risposto alla mostra.Azioni:creare, distruggere, e di nuovo"

ogni pensiero?thanx

È stato utile?

Soluzione

Che cosa avete nel vostro file di route?

Prova a mettere

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

nei percorsi.

Poi basta avere

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

per il segno di link.

MODIFICA

Il suo tutti a come si specificare il routing.

Perché aveva una mappa.log_out di routing, quindi l'url http://localhost:3000/logout url è preso da questo e instradato verso l'azione corretta.

Se si dispone di :

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

Questo sarà solo generare un link per voi di http://localhost:3000/session.Ma, non fa nulla per il routing.Hai ancora bisogno di specificare le rotte giuste.

Nota che le Rotaie non aggiungere il distruggere azione per l'url. (Non creare http://localhost:3000/session/destroy.) Si presuppone che se si dispone di un azione di distruggere verranno inviati con un ELIMINA http verbo.Per qualche ragione, non è molto ideale e non effettivamente anche quello di default per l'invio di ELIMINARE il verbo.

Si può forzare a fare questo :

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

Questo ancora non funziona, a meno che è anche il percorso in modo corretto.Se si mettono i seguenti percorsi :

map.resource :session

Quindi rails generare il routing per tutti i verbi e specificare le azioni predefinite per loro, tra cui ELIMINARE.Ulteriori informazioni possono essere trovate qui : Guide di Routing dall'Esterno.

Che tutta la pagina sia la pena di leggere fino a che non hai davvero capito.Il Routing è la chiave per la comprensione Rotaie!

Per un semplice controllore, come le Sessioni, è più facile solo per specificare il log_out percorso e quindi collegare log_out_url..

(Spero che abbia un senso, la privazione del sonno è strisciante!)

Altri suggerimenti

Se si utilizza escogitare e il vostro modello in questione è utente , il modo elegante è qui:

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

Funziona perché:

  • a causa di HTTP metodi sono GET, POST, PUT, PATCH e DELETE, in modo da utilizzare method: :delete (non method: :destroy)
  • che stiamo usando destroy_user_session_path con escogitare e utente modello, come al solito, se si definisce altro nome del modello come Gestione è sufficiente cambiare il logout percorso destroy_manager_session_path
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top