使用 delete 设计与其他路由冲突

Devise conflicting with other routes using delete

我的应用程序中有这 2 个冲突的路由

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

我的routes文件对应部分如下

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

当我尝试使用以下 link

销毁会话时
<li><%= link_to "Sign out", destroy_user_session_path, method: "delete" %></li>

它尝试导航到以下路线 localhost:3000/users/sign_out

这将转到我的 UserController 并尝试 运行 destroy 方法传递 sign_out 作为参数而不是路由

Couldn't find User with id=sign_out

我的路由文件中的第一行是允许在 UserController 中删除单个用户,这是 destroy 方法。这必须放在 devise_for 之前,否则它会尝试使用 DELETE 路由到设计的 edit_user_registration_path。现在它似乎正在覆盖设计 destroy_user_session_path

我不确定如何解决这个问题,如有任何建议,我们将不胜感激

通常,我会认为 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 路线应该对您有所帮助...或者您可以将其移到 resources :users 下方。您应该跳过使用 resources.

创建 destroy