397 votes

Pas de route correspond à "/users/sign_out" concevoir de rails 3

J'ai installé concevoir sur mon application et d'appliquer la suivante dans mon application.html.erb le fichier:

<div id="user_nav">
    <% if user_signed_in? %>
        Signed in as <%= current_user.email %>. This cannot be cheese?
        <%= link_to 'Sign out', destroy_user_session_path %>
    <% else %>
        <%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>
    <% end %>
</div>

J'ai couru rake routes et a confirmé que toutes les routes sont valides.

Aussi, dans ma routes.rb le fichier que j'ai devise_for :users et root :to => "home#index".

J'ai le routage d'erreur en cliquant sur le lien "Sign out":

No route matches "/users/sign_out"

Les idées de ce que la cause de l'erreur?

584voto

Jessie Dedecker Points 4801

Je pense que la route pour la signature est un DELETE méthode. Cela signifie que votre lien déconnexion doit ressembler à ceci <%= link_to "Sign out", destroy_user_session_path, :method => :delete %>. La vôtre ne comprend pas l' :method => :delete partie. Aussi, veuillez noter que pour que cela fonctionne, vous devez également inclure <%= javascript_include_tag :defaults %> dans votre fichier de mise en page de l'application.html.erb).

142voto

kitdesai Points 922

J'ai modifié cette ligne en concevoir.rb:

config.sign_out_via = :delete

pour

config.sign_out_via = :get

et il a commencé à travailler pour moi.

61voto

Gravis Points 3097

Vous n'avez probablement pas inclure jquery_ujs fichier javascript. Assurez-vous que vous utilisez la dernière version de jquery-ujs : https://github.com/rails/jquery-ujs et les derniers fichiers disponibles :

rails generate jquery:install

Vous devriez ne plus avoir de rails.js fichier. Si vous le faites, vous êtes probablement out-of-date. Assurez-vous également ce fichier est chargé avec les paramètres par défaut, dans le fichier config/application.rb

config.action_view.javascript_expansions[:defaults] = %w(jquery.min jquery_ujs)

(Encore une fois, vous devriez pas avoir rails.js fichier ici). Enfin, ajouter le lien comme indiqué sur Concevoir wiki (haml-style):

= link_to('Logout', destroy_user_session_path, :method => 'delete')

Et tout ira bien.

31voto

Will Nathan Points 253

La capacité à faire le lien de Déconnexion d'une SUPPRESSION, Reposant appel nécessite un attribut html data-method = "delete" en utilisant les rails code = link_to('Logout', destroy_user_session_path, :method => :delete).

Toutefois, si vous n'avez pas la gemme jquery-ujs installé ou ne font pas appel à l'résultant de javascript dans votre application.html via = javascript_include_tag "application", la réponse sera envoyé sous la forme d'une requête GET, et la route sera un échec.

Vous avez un peu d'options si vous ne voulez pas utiliser jquery-ujs ou ne peut pas trouver un moyen de le faire fonctionner:

  1. Variation config.sign_out_via de l'égalité des :get dans devise.rb (non recommandé, car SUPPRIMER est approprié Reposant requête)
  2. OU de Modifier l' link_to de = button_to('Logout', destroy_user_session_path, :method => :delete). Avec button_to Rails de faire le gros du travail à faire du bon de SUPPRIMER l'appel. Vous pouvez ensuite le style de la touche pour ressembler à un lien si vous le souhaitez.

26voto

Kevin Tsoi Points 1225

Essayez d'ajouter une nouvelle route à concevoir/les sessions#détruire et de liaison. Par exemple:

routes.rb
devise_for :users do
  get 'logout' => 'devise/sessions#destroy'
end

vue:

<%= link_to "Logout", logout_path %>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X