2013-04-01 47 views
0

我正在使用設計進行身份驗證。我的問題出現在嘗試刪除用戶時。 我得到以下的ActiveRecord :: RecordNotFound錯誤無法找到用戶id爲用戶Rails - 設計 - 無法取消帳戶 - 無法找到id = users的用戶

誤差以打擊:

before_filter :authenticate_user!, :except => [:show] 

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

和傳遞的參數是:

{"controller"=>"users", "action"=>"show", "id"=>"users"} 

我一直想知道這個錯誤是否與類註冊控制器< Devise :: RegistrationsController我爲設計定製創建,但我不知道。

我的直覺告訴我,這確實是一個路由問題。這裏是我的路線文件:

Music::Application.routes.draw do 

# resources :users 



devise_scope :user do 

    get "/edit/account/:id" , to: "devise/registrations#edit" , :as => "edit_account" 

    get "/login" , to: "devise/sessions#new" , :as => "login" 
    get "/logout" , to: "devise/sessions#destroy" , :as => "logout" 
end 

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "registrations" } 

resources :contact_us_emails 


get('/about-us', { :controller => "WelcomePages", :action => 'about', :as => 'about_us'}) 
get('/contact_us', { :controller => "WelcomePages", :action => 'contact_us', :as => 'contact_us'}) 

get('/search_collaborators', { :controller => "SongRooms", :action => 'search_collaborators', :as => 'search_collaborators'}) 

resources :searches do 
    collection do 
    get '/song_rooms/:query', :controller => "searches", :action => 'song_rooms', :as => 'search_song_rooms' 
    get '/users/:query', :controller => "searches", :action => 'users', :as => 'search_users' 
    get '/final_songs/:query', :controller => "searches", :action => 'final_songs', :as => 'search_final_songs' 
    get '/search_and_invite_facebok_friends/:user_id', :controller => "searches", :action => "search_and_invite_facebok_friends", :as => 'invite_fb_friends' 
    end 
    end 

match 'download/:id' => 'versions#download', :as => :download 
match '/musicians' => 'searches#musicians', :via => :get, :as => 'musicians' 
match '/producers' => 'searches#producers', :via => :get, :as => 'producers' 

match '/accept/:id' => 'requests#accept', :via => :get, :as => 'accept' 
match '/deny/:id' => 'requests#deny', :via => :get, :as => 'deny' 

match '/users/:id' => 'devise/registrations#destroy', :via => :delete, :as => 'cancel_registration' 


resources :versions do 
    resources :messages 
    member do 
    post :vote 
    get :mark_as_final 
    get :unmark_as_final 
    end 
end 

post('/collaborators', {:controller => "Collaborators", :action => 'create', :as => 'create_collaborator'}) 

delete('song_rooms/:id/collaborators/:id', { :controller => "Collaborators", :action => 'destroy', :as => 'delete_collaborator'}) 

resources :song_rooms do 
    member do 
    get 'choose_final_song' 
    end 
    resources :collaborators 
end 



resources :user_song_uploads 
# resources :users 




post('/user/:id/vote', { :controller => "Users", :action => 'vote', :as => 'user_vote'}) 





match '/:id', :to => "users#show", :as => :user, :via => :get 


authenticated :user do 
    root :to => "welcome_pages#home" , :as => "user_home" 
end 
root :to => "welcome_pages#index" , :as => "home" 



end 

最後我取消的link_to操作是這樣的:

<%= link_to "Cancel my account", registration_path(resource), :data => { :confirm => "Are you sure?" }, :method => :delete %> 

我也嘗試切換出資源爲RESOURCE_NAME,@user,@ user.id,CURRENT_USER,CURRENT_USER 。ID。

感謝您的任何幫助!

回答

0

你設置要devise/registrations#destroy和路線稱之爲cancel_registration

match '/users/:id' => 'devise/registrations#destroy', :via => :delete, :as => 'cancel_registration' 

試着改變你的鏈接:

<%= link_to "Cancel my account", cancel_registration_path(resource), :data => { :confirm => "Are you sure?" }, :method => :delete %> 
+0

當我改變它我得到:沒有路由匹配[GET]「/用戶/ user_example甚至不知道爲什麼它的路由作爲GET請求 – Jches

0

想出了一個解決辦法:

devise_scope :user do 
    get "/edit/account/:id" , to: "devise/registrations#edit" , :as => "edit_account" 
    delete "/delete_user/:id", to: "devise/registrations#destroy", :as => "delete_account" 
    get "/login" , to: "devise/sessions#new" , :as => "login" 
    get "/logout" , to: "devise/sessions#destroy" , :as => "logout" 
end 

路由到行動:在RegistrationsController < Devise :: RegistrationsCon troller

def destroy 
    @user = User.find(params[:id]) 
    @user.destroy 
    respond_to do |format| 
    format.html { redirect_to home_path, notice: "We're sorry to see you go. Send us some feedback before you go!"} 
    end 
end 

最後:該動作的link_to:

<%= button_to "Cancel my account", delete_account_path(@user.id), :data => { :confirm => "Are you sure?" }, :method => :delete %> 

我不知道這是爲什麼這麼麻煩。但是將我的路由動作放在devise_scope中似乎是解決方案。

相關問題