Question

J'ai installé l'authentification et tout semble RESTFUL fonctionner très bien. je peux inscrire et vous connecter. la seule façon que je peux déconnecter en tapant est l'URL http: // localhost: 3000 / fermeture de session

Comment puis-je ajouter un bouton de fermeture de session sur une page? i essayé d'ajouter un à l'members.rhtml

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

qui fait référence à la session_controller.rb mais je reçois une erreur « Aucune action a répondu à montrer Actions:. créer, détruire, et nouveau »

toutes les pensées? thanx

Était-ce utile?

La solution

Qu'est-ce que vous avez dans votre fichier routes?

Essayez de mettre

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

dans vos itinéraires.

Ensuite suffit

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

pour le lien déconnectez-vous.

EDIT

Son tout à la façon dont vous spécifiez le routage.

Parce que vous avez eu l'map.log_out dans le routage, le http: // localhost: 3000 / fermeture de session url est repris par cela et dirigé vers l'action correcte.

Si vous avez:

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

Cela vient de générer un lien pour vous de http: // localhost: 3000 / Session . Mais, il ne fait rien pour le routage. Vous devez toujours indiquer les routes correctes.

Notez que Rails ne rajoutez pas détruire l'action à l'URL. (Il ne crée pas http: // localhost:. 3000 / Session / détruire ) il suppose que si vous avez une action de détruire que vous enverrez avec un verbe SUPPRIMER http. Pour une raison quelconque, ce ne est pas tout à fait parfait et il ne marche pas fait défaut également d'envoyer le verbe SUPPR.

Vous pouvez forcer à faire ceci:

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

Cela fonctionne toujours pas à moins que vous aussi la route correctement. Si vous mettez ce qui suit dans les routes:

map.resource :session

Ensuite rails généreront le routage pour tous les verbes et spécifier les actions par défaut pour eux, y compris SUPPR. Plus d'informations peuvent être trouvées ici: Rails d'acheminement de l'extérieur .

Cette page entière mérite d'être lu à plusieurs reprises jusqu'à ce que vous comprenez vraiment. Le routage est la clé pour comprendre Rails!

Pour un contrôleur simple comme sessions, il est plus facile de spécifier la route log_out puis reliez à log_out_url ..

(espoir qui fait sens, la privation de sommeil est rampant dans!)

Autres conseils

Si vous utilisez concevoir et votre modèle concerné est utilisateur , la façon élégante est ici:

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

Cela fonctionne parce que:

  • en raison de méthodes HTTP sont GET, POST, PUT, PATCH et DELETE, donc l'utilisation method: :delete (non method: :destroy)
  • nous utilisons destroy_user_session_path avec concevoir et utilisateur modèle comme d'habitude, si vous définissez un autre nom de modèle tel que Gestionnaire vous venez de changer fermeture de session chemin de destroy_manager_session_path
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top