Pregunta

He instalado autenticación de descanso y todo parece estar funcionando bien. i puede registrarse e iniciar sesión. la única manera de que pueda cerrar la sesión está escribiendo la URL http: // localhost: 3000 / cierre de sesión

¿Cómo puedo añadir un botón de cierre de sesión en una página? He intentado añadir una a la members.rhtml

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

que hace referencia al session_controller.rb pero consigo un error "Ninguna acción respondió a mostrar acciones:. crear, destruir, y el nuevo"

alguna idea? Gracias

¿Fue útil?

Solución

¿Qué tiene en su archivo de rutas?

Trate de poner

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

en sus rutas.

A continuación, sólo tenemos

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

para el enlace Salir.

Editar

Su todo se debe a la forma de especificar la ruta.

Debido a que tenía la map.log_out en la ruta, entonces el URL http: // localhost: 3000 / cierre de sesión url es recogido por este y se dirige a la acción correcta.

Si usted tiene:

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

Esto sólo va a generar un enlace para usted de http: // localhost: 3000 / sesión . Sin embargo, no hace nada para el enrutamiento. Todavía es necesario especificar las rutas correctas.

Tenga en cuenta que los carriles no anexa la acción a la url destruir. (no va a crear http: // localhost:. 3000 / sesión / destruir ) se supone que si usted tiene una acción de destruir que va a enviar con un DELETE http verbo. Por alguna razón, no es del todo perfecto y es imposible en realidad también por defecto para enviar el verbo DELETE.

Se puede obligar a hacer esto:

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

Esto todavía no funciona a menos que también ruta correctamente. Si ponemos la siguiente en las rutas:

map.resource :session

A continuación, los carriles generará el enrutamiento para todos los verbos y especificar las acciones predeterminadas para ellos, incluyendo ELIMINAR. Más información se puede encontrar aquí: rieles de enrutamiento de afuera hacia adentro .

Eso página entera vale la pena leer una y otra vez hasta que realmente lo entiende. Enrutamiento es clave para entender los carriles!

Para un controlador simple como Sesiones, es más fácil simplemente para especificar la ruta log_out y luego enlazar a log_out_url ..

(Hope que tenga sentido, la privación del sueño se está arrastrando en!)

Otros consejos

Si está utilizando legado y su modelo en cuestión es usuario , la manera elegante está aquí:

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

Funciona porque:

  • debido a HTTP métodos son GET, POST, PUT, parche y DELETE, así que usar method: :delete (no method: :destroy)
  • estamos utilizando destroy_user_session_path con y usuario modelo legado como de costumbre, si se define otro nombre del modelo, como Administrador que acaba de cambio de cierre de sesión ruta de acceso a destroy_manager_session_path
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top