2015-05-31 26 views
1

我在尝试注销用户时遇到此错误。我查了很多这个相同错误的帖子,但没有人解决我的错误,我希望你能帮助我。尝试注销时出错:无法找到具有'id'的用户= sign_out

误差如下:

ActiveRecord::RecordNotFound in UsersController#destroy 
Couldn't find User with 'id'=sign_out 

以下是我的代码:

users_controller.rb

def destroy 
     @user.destroy 
     respond_to do |format| 
     format.html { redirect_to unauthenticated_root_path } 
     format.json { head :no_content } 
     end 
    end 

    private 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
     @user = User.find(params[:id]) 
    end 

视图/用户/ index.html.erb

<li> 
    <%= link_to "Logout", destroy_user_session_path, :method => :delete %> 
    </li> 

routes.rb

Rails.application.routes.draw do 
    get 'admin/index' 

    resources :contacts 

    resources :afections 

    resources :injuries 

    resources :allergies 

    resources :trainers 

    resources :idusuarios 

    resources :diseases 

    resources :weights 

    resources :diets 

    resources :exercices 

    resources :profiles 

    resources :users 

    devise_for :users 

    get '/users/sign_out' => 'devise/sessions#destroy' 

    devise_scope :user do 
    authenticated :user do 
     root 'pagina#index', as: :authenticated_root 
    end 

    unauthenticated do 
     root 'devise/sessions#new', as: :unauthenticated_root 
    end 
    end 
end 

回答

1

移动get '/users/sign_out' => 'devise/sessions#destroy'。根据路线文件中的顺序,路线优先。

+0

解决! routes.rb结尾是这样的: 'get'/ users/sign_out'=>'devise/sessions#destroy' resources:users' –

0

当您在路由使用resources :users,你有这样的路线:

/users 
/users/:id 
/users/:id/edit 
and ... 

所以当/users/sign_out叫,认为sign_out是一个ID。

so change /users/sign_out to /user/sign_out例如。

,如果你想定制你的会话路径,你可以这样做:

  1. 定制您的会话路径:

    as :user do 
        get 'user/signin' => 'devise/sessions#new', :as => :new_user_session 
        post 'user/signin' => 'devise/sessions#create', :as => :user_session 
        delete 'user/signout' => 'devise/sessions#destroy', :as => :destroy_user_session, via: [:delete, :get] 
    end 
    

,并在色器件跳过会议:

devise_for :users, :skip => [:sessions] 
  • ,如果你想用户注册时,必须跳过它在色器件,然后可以使用用户脚手架:上面你的路由resources :users

    as :user do 
        get 'user/signin' => 'devise/sessions#new', :as => :new_user_session 
        post 'user/signin' => 'devise/sessions#create', :as => :user_session 
        delete 'user/signout' => 'devise/sessions#destroy', :as => :destroy_user_session, via: [:delete, :get] 
    end 
    scope "admin" do     
        resources :users 
        devise_for :users, :skip => [:sessions, :registrations] 
    end 
    
  • 相关问题