2011-07-24 17 views
10

Aunque hay muchas preguntas similares, la he buscado durante horas pero aún no puedo solucionarla.rails idear, ninguna ruta coincide cerrar sesión

Env rieles 3.0.9 rubí 1.9.2 legado 1.4.2

me cambiaron la URL de inicio de sesión predeterminado usando:

5 resources :users 
6 devise_for :users, :path => "", :path_names => { :sign_in => 'login', :sign_out 
    => 'logout', :password => 'secret', :confirmation => 'verification', :unlock => 
    'unblock', :registration => 'register', :sign_up => 'cmon_let_me_in' } 

Y el http://localhost:3000/login funciona bien para mí Pero incluyo

= link_to 'sign_out', destroy_user_session_path, :method => :delete 

en mi application.haml, después de hacer clic en él, dice s que ninguna ruta coincide con "/ logout" ¿Por qué? Por favor, ayúdenme.

+0

¿Cuál es la salida de 'routes' rastrillo? – Dogbert

+0

¿Has probado Google? http://stackoverflow.com/questions/6805491/ruby-on-rails-devise-http-0-0-0-03000-users-sign-out-problem/6805662#6805662 – bassneck

Respuesta

11

Tuve un problema casi idéntico y gracias a SO se solucionó bastante fácilmente (link to my question). Primero, asegúrese de tener <%= javascript_include_tag :defaults %> en su archivo de diseño "application.html.erb".

Luego, en su configuración -> inicializadores - archivo> "devise.rb" asegurarse de que dice:

config.sign_out_via = :delete

y su código "sign_out" destroy_user_session_path, :method => :delete debería funcionar.

+1

I m usando rubí 1.9.2p180, Rails 3.1.0.rc4 y diseñar 1.4.2. Tengo la aplicación <% = javascript_include_tag "%> en mi archivo de diseño. y usando <% = link_to 'Cerrar sesión', destroy_user_session_path,: method =>: delete%> Pero aún así no funciona para mí – Sayuj

+0

En su archivo de inicializadores "devise.rb" tiene 'config.sign_out_via =: delete' o 'config.sign_out_via =: get'? Ha habido una actualización reciente de la forma en que el diseño maneja las rutas. Si está utilizando el método: delete, necesitaría tener su ruta sign_out configurada como la primera opción. – mmichael

+0

Estoy teniendo el mismo problema. Lo tengo configurado correctamente en el devise.rb (configurado para: eliminar) y el link_to (: method =>: delete). También estoy usando e incluido JQuery. Sin embargo, aún recibo una solicitud 'OBTENER'. También he comprobado el código generado y veo lo siguiente para el método link_to: Logout. –

4

Establezca config.sign_out_via = :get en config/initializers/devise.rb para utilizar el siguiente código para su enlace de cierre de sesión.

<%= link_to "Sign Out", destroy_user_session_path %> 
+0

Voto abajo porque es menos seguro que usar el token post + csrf. – Bijan

5

Un poco tarde a la fiesta, pero aquí es un poco de ayuda de otra answer

Especificar el método:

<%= link_to "sign out", destroy_user_session_path, method: :delete %> 
Cuestiones relacionadas