2015-06-10 12 views
0

我有這兩條路線是在我的應用程序衝突的其他路線衝突的設計與使用delete

destroy_users DELETE /users/:id(.:format)     users#destroy 
destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 

我的路線文件的相應部分如下

match '/users/:id', to: 'users#destroy', :via => :delete, :as =>:destroy_users 
devise_for :users 
resources :users 

當我試圖摧毀使用下面的鏈接會話

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

它試圖瀏覽下面的路線 本地主機:3000 /用戶/ SIGN_OUT

這是要我的UserController中,並試圖運行destroy方法傳遞SIGN_OUT作爲參數,而不是一個路線

Couldn't find User with id=sign_out 

在我的路線文件的第一行是允許在UserController中刪除單個用戶,這是銷燬方法。這必須放在devise_之前,否則它試圖使用DELETE路由到devise的edit_user_registration_path。現在,它似乎是覆蓋色器件destroy_user_session_path

我不知道如何解決這個問題的任何建議,將不勝感激

回答

0

通常情況下,我認爲devise_for :users創建以下航線使用

    Prefix Verb URI Pattern     Controller#Action 
     new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
      user_session POST /users/sign_in(.:format)  devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 
      user_password POST /users/password(.:format)  devise/passwords#create 
     new_user_password GET /users/password/new(.:format) devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PATCH /users/password(.:format)  devise/passwords#update 
         PUT /users/password(.:format)  devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)  devise/registrations#cancel 
     user_registration POST /users(.:format)    devise/registrations#create 
    new_user_registration GET /users/sign_up(.:format)  devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)   devise/registrations#edit 
         PATCH /users(.:format)    devise/registrations#update 
         PUT /users(.:format)    devise/registrations#update 
         DELETE /users(.:format)    devise/registrations#destroy 

路線你

    Prefix Verb URI Pattern     Controller#Action 
      destroy_users DELETE /users/:id(.:format)   users#destroy <--- oops this should be below all the other routes 
     new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
      user_session POST /users/sign_in(.:format)  devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 
      user_password POST /users/password(.:format)  devise/passwords#create 
     new_user_password GET /users/password/new(.:format) devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PATCH /users/password(.:format)  devise/passwords#update 
         PUT /users/password(.:format)  devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)  devise/registrations#cancel 
     user_registration POST /users(.:format)    devise/registrations#create 
    new_user_registration GET /users/sign_up(.:format)  devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)   devise/registrations#edit 
         PATCH /users(.:format)    devise/registrations#update 
         PUT /users(.:format)    devise/registrations#update 
         DELETE /users(.:format)    devise/registrations#destroy 
        users GET /users(.:format)    users#index 
         POST /users(.:format)    users#create 
       new_user GET /users/new(.:format)   users#new 
       edit_user GET /users/:id/edit(.:format)  users#edit 
        user GET /users/:id(.:format)   users#show 
         PATCH /users/:id(.:format)   users#update 
         PUT /users/:id(.:format)   users#update 
         DELETE /users/:id(.:format)   users#destroy <--- notice it typically would be 

刪除第一match路線應該幫助你...或者你可以將它BEL你的resources :users。您應該跳過使用resources跳過創建destroy

+0

我不知道發生了什麼,我需要匹配'/ users /:id',以:'users#destroy',:via =>:delete,:as =>:destroy_users。一旦我刪除它,並將我的刪除路徑返回到user_path,一切都開始爲我工作了。我一直在轉向設計和cancancan,在我重構的某個地方,我一定犯了一個錯誤,然後投入黑客修復這個錯誤 –