2011-07-06 18 views
15

Estoy en proceso actualizando mi aplicación, así que uso la gema Devise para la autenticación. Todo parece funcionar muy bien, excepto por el hecho de que parece que no puedo cerrar la sesión.Problema al cerrar la sesión con Devise en mi aplicación

me sale el error:

Couldn't find User with ID=sign_out 
Parameters: 
{"id"=>"sign_out"} 

puedo rastrear el error de nuevo a la acción show en mi controlador de los usuarios:

def show 
    @user = User.find(params[:id]) 
    end 

El problema es que no estoy seguro de por qué se está tratando para renderizar la acción de mostrar para mi usuario. En general mi página tiene este formato:

<% if user_signed_in? %> 
    <%= render 'shared/feed_home' %> 
<% else %> 
    <%= render 'shared/splash' %> 
<% end %> 

Según las instrucciones legado, mi camino señal de salida se parece a esto:

<li><%= link_to "Sign out", destroy_user_session_path %></li> 

Si un usuario no ha iniciado sesión, se debe mostrar la página de bienvenida, que es básicamente estático html. ¿Alguna sugerencia sobre cómo ayudar? Incluso si pudieras ponerme en el parque de pelota correcto en términos del problema que sería muy apreciado.

Here is my routes file: 


    devise_for :users 
    resources :users do 
    member do 
     get :following, :followers, :following_tags, :following_posts 
    end 
    end 
    resources :posts 

    resources :votes 
    resources :comments 
    resources :tags 
    resources :events 

    #resources :posts, :only => [:create, :destroy, :show] 
    resources :relationships, :only => [:create, :destroy] 

    root :to =>'pages#subscribed' 


    match '/contact', :to => 'pages#contact' 
    match '/about', :to => 'pages#about' 
    match '/live', :to => "pages#home" 
    match '/voted', :to => 'pages#highest_voted' 
    match '/signup', :to => 'users#new' 

Aquí está mi rastrillo rutas:

 new_user_session GET /users/sign_in(.:format)    {:action=>"new", :controller=>"devise/sessions"} 
      user_session POST /users/sign_in(.:format)    {:action=>"create", :controller=>"devise/sessions"} 
    destroy_user_session DELETE /users/sign_out(.:format)   {:action=>"destroy", :controller=>"devise/sessions"} 
      user_password POST /users/password(.:format)   {:action=>"create", :controller=>"devise/passwords"} 
     new_user_password GET /users/password/new(.:format)  {:action=>"new", :controller=>"devise/passwords"} 
     edit_user_password GET /users/password/edit(.:format)  {:action=>"edit", :controller=>"devise/passwords"} 
         PUT /users/password(.:format)   {:action=>"update", :controller=>"devise/passwords"} 
cancel_user_registration GET /users/cancel(.:format)    {:action=>"cancel", :controller=>"devise/registrations"} 
     user_registration POST /users(.:format)      {:action=>"create", :controller=>"devise/registrations"} 
    new_user_registration GET /users/sign_up(.:format)    {:action=>"new", :controller=>"devise/registrations"} 
    edit_user_registration GET /users/edit(.:format)    {:action=>"edit", :controller=>"devise/registrations"} 
         PUT /users(.:format)      {:action=>"update", :controller=>"devise/registrations"} 
         DELETE /users(.:format)      {:action=>"destroy", :controller=>"devise/registrations"} 
      following_user GET /users/:id/following(.:format)  {:action=>"following", :controller=>"users"} 
      followers_user GET /users/:id/followers(.:format)  {:action=>"followers", :controller=>"users"} 
    following_tags_user GET /users/:id/following_tags(.:format) {:action=>"following_tags", :controller=>"users"} 
    following_posts_user GET /users/:id/following_posts(.:format) {:action=>"following_posts", :controller=>"users"} 
        users GET /users(.:format)      {:action=>"index", :controller=>"users"} 
         POST /users(.:format)      {:action=>"create", :controller=>"users"} 
       new_user GET /users/new(.:format)     {:action=>"new", :controller=>"users"} 
       edit_user GET /users/:id/edit(.:format)   {:action=>"edit", :controller=>"users"} 
        user GET /users/:id(.:format)     {:action=>"show", :controller=>"users"} 
         PUT /users/:id(.:format)     {:action=>"update", :controller=>"users"} 
         DELETE /users/:id(.:format)     {:action=>"destroy", :controller=>"users"} 
        posts GET /posts(.:format)      {:action=>"index", :controller=>"posts"} 
         POST /posts(.:format)      {:action=>"create", :controller=>"posts"} 
       new_post GET /posts/new(.:format)     {:action=>"new", :controller=>"posts"} 
       edit_post GET /posts/:id/edit(.:format)   {:action=>"edit", :controller=>"posts"} 
        post GET /posts/:id(.:format)     {:action=>"show", :controller=>"posts"} 
         PUT /posts/:id(.:format)     {:action=>"update", :controller=>"posts"} 
         DELETE /posts/:id(.:format)     {:action=>"destroy", :controller=>"posts"} 
        votes GET /votes(.:format)      {:action=>"index", :controller=>"votes"} 
         POST /votes(.:format)      {:action=>"create", :controller=>"votes"} 
       new_vote GET /votes/new(.:format)     {:action=>"new", :controller=>"votes"} 
       edit_vote GET /votes/:id/edit(.:format)   {:action=>"edit", :controller=>"votes"} 
        vote GET /votes/:id(.:format)     {:action=>"show", :controller=>"votes"} 
         PUT /votes/:id(.:format)     {:action=>"update", :controller=>"votes"} 
         DELETE /votes/:id(.:format)     {:action=>"destroy", :controller=>"votes"} 
       comments GET /comments(.:format)     {:action=>"index", :controller=>"comments"} 
         POST /comments(.:format)     {:action=>"create", :controller=>"comments"} 
      new_comment GET /comments/new(.:format)    {:action=>"new", :controller=>"comments"} 
      edit_comment GET /comments/:id/edit(.:format)   {:action=>"edit", :controller=>"comments"} 
       comment GET /comments/:id(.:format)    {:action=>"show", :controller=>"comments"} 
         PUT /comments/:id(.:format)    {:action=>"update", :controller=>"comments"} 
         DELETE /comments/:id(.:format)    {:action=>"destroy", :controller=>"comments"} 
        tags GET /tags(.:format)      {:action=>"index", :controller=>"tags"} 
         POST /tags(.:format)      {:action=>"create", :controller=>"tags"} 
       new_tag GET /tags/new(.:format)     {:action=>"new", :controller=>"tags"} 
       edit_tag GET /tags/:id/edit(.:format)    {:action=>"edit", :controller=>"tags"} 
        tag GET /tags/:id(.:format)     {:action=>"show", :controller=>"tags"} 
         PUT /tags/:id(.:format)     {:action=>"update", :controller=>"tags"} 
         DELETE /tags/:id(.:format)     {:action=>"destroy", :controller=>"tags"} 
        events GET /events(.:format)     {:action=>"index", :controller=>"events"} 
         POST /events(.:format)     {:action=>"create", :controller=>"events"} 
       new_event GET /events/new(.:format)    {:action=>"new", :controller=>"events"} 
       edit_event GET /events/:id/edit(.:format)   {:action=>"edit", :controller=>"events"} 
        event GET /events/:id(.:format)    {:action=>"show", :controller=>"events"} 
         PUT /events/:id(.:format)    {:action=>"update", :controller=>"events"} 
         DELETE /events/:id(.:format)    {:action=>"destroy", :controller=>"events"} 
      relationships POST /relationships(.:format)    {:action=>"create", :controller=>"relationships"} 
      relationship DELETE /relationships/:id(.:format)   {:action=>"destroy", :controller=>"relationships"} 
        root  /(.:format)       {:controller=>"pages", :action=>"subscribed"} 
       contact  /contact(.:format)     {:controller=>"pages", :action=>"contact"} 
        about  /about(.:format)      {:controller=>"pages", :action=>"about"} 
        live  /live(.:format)      {:controller=>"pages", :action=>"home"} 
        voted  /voted(.:format)      {:controller=>"pages", :action=>"highest_voted"} 
        signup  /signup(.:format)     {:controller=>"users", :action=>"new"} 
+0

Utilice este enlace para signout [Salir problema resuelto para Devise] [1]: http://stackoverflow.com/questions/6557311/no-route-matches-users-sign-out-devise-rails-3 –

Respuesta

27

En realidad, ignorar mi respuesta anterior y probar este:

<li><%= link_to "Sign out", destroy_user_session_path, :method => :delete %></li> 
+0

Actualmente estoy lejos de mi computadora y no puedo probar esto. Sin embargo, lo probaré tan pronto como llegue a casa. Gracias de nuevo :) – Spencer

+0

No hay problema. Parece que Devise no está generando un método de obtención para el registro, simplemente elimine. Los documentos dicen que debería, por lo que no estoy seguro de por qué no fue así. Pero * debería * funcionar :-) – Slick23

+1

Esto es completamente - la ruta quiere el método de eliminación, no el método get. 'destroy_user_session DELETE /users/sign_out(.:format) {: action =>" destroy ",: controller =>" idear/sessions "} ' – DGM

2

El problema podría estar en el archivo de routes.rb. Debe enrutar el user/signout de forma adecuada y debe estar sobre la ruta para sus usuarios, porque las rutas funcionan de arriba hacia abajo. Si publica su archivo de rutas, puedo ayudarlo más.

¿Tiene quizás un resources :users arriba de su devise_for :users?

supongo que también puede probar la determinación del alcance de las rutas Idear:

devise_scope :users do 
     get "sign_out", :to => "devise/sessions#destroy" 
    end 
+0

Se supone que el dispositivo debe proporcionar de esa ruta automáticamente, pensé? Según mi edición más reciente, solo estoy enlazando con la ruta de diseño predeterminada para finalizar la sesión. – Spencer

+0

También publiqué mi archivo de rutas. – Spencer

+0

Sí, mira mi actualización. Por alguna razón, los rieles piensan que 'sign_out' es una identificación para un recurso de los usuarios. ¿Qué te ofrece 'rutas de rastrillo '? – Slick23

Cuestiones relacionadas