2012-01-21 1 views
1

J'utilise les rails 3.1.3 et je conçois 1.5.3 et quand j'ajoute destroy_user_session_path à mon fichier de formatage, le lien ne fonctionne pas. Je peux vous connecter très bien, mais quand je clique sur ce chemin que j'obtenir cette erreur:destroy_user_session ne fonctionne pas dans Devise

No route matches [GET] "https://stackoverflow.com/users/sign_out" 

MAIS, si je lance des itinéraires de râteau, je vois cet itinéraire indiqué:

destroy_user_session DELETE /users/sign_out(.:format) 
{:action=>"destroy", :controller=>"devise/sessions"} 

Ainsi la route utilise clairement le verbe DELETE. Je peux obtenir le chemin au travail en ajoutant :method => :delete, mais pourquoi dois-je faire cela? L'itinéraire est là et configuré pour être déjà supprimé, alors quoi de neuf?

Répondre

1

rake routes indique les routes auxquelles votre application répondra. C'est à vous de vous assurer que vous générez des liens qui correspondent à ce que le serveur attend. link_to ne vérifie pas pour voir quels verbes sont autorisés en fonction des itinéraires - il s'attend à ce que vous fournissiez le verbe correct.

+0

Mais, les routes sont configurées en utilisant devise_for: users pour définir l'itinéraire en utilisant DELETE, comme si j'utilisais des ressources: users, alors pourquoi cette configuration ne marche-t-elle pas? J'ai vu beaucoup d'exemples utilisant un concept qui ne nécessite pas de verbe ... –

+0

Le verbe par défaut implicite avec 'link_to' est' GET'. Donc, si le serveur attend un 'GET', vous n'avez pas besoin d'ajouter un verbe explicite dans' link_to'. Parfois, les routes sont également configurées pour correspondre à n'importe quel verbe, donc dans ces cas, vous n'aurez pas besoin d'ajouter un verbe explicite. Il arrive juste (comme vous l'avez remarqué lorsque vous avez couru 'rake routes') que dans ce cas les routes ont été configurées par un système de sorte que le serveur ne fasse que correspondre à' DELETE'. Ainsi, vous devez 'link_to' pour utiliser le verbe' DELETE'. – cailinanne

+0

D'accord, c'est logique. Merci pour l'info! –

Questions connexes