Rails/Devise:找不到 'id'=sign_out 的用户

Rails/Devise: Couldn't find User with 'id'=sign_out

我从 Rails 收到一条错误消息,提示找不到 ID 为 'sign_out' 的用户。当我尝试注销用户会话时出现错误。应用程序正在查看 GET 路由,而不是我希望的 DELETE 路由。

我查看了其他有类似错误的帖子,他们建议路由配置不正确。但我似乎无法弄清楚我的应用程序发生了什么。我尝试了几种方法:

None 这些选项似乎对我有用。

这是我的相关文件:

routes.rb

Rails.application.routes.draw do
  root to: 'welcome#index'
  devise_for :users
  resources :users, only: [:index,:show]

  resources :images, only: [:index, :show, :update]
  resources :challenges
end

我也试过嵌套直接调出路径:

devise_for :users do
  get '/users/sign_out' => 'devise/sessions#destroy'
end
resources :users, only: [:index,:show]

我的 link 注销:

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

运行 rake路线(相关路线):

                  Prefix Verb   URI Pattern                       Controller#Action
    destroy_user_session DELETE /users/sign_out(.:format)         devise/sessions#destroy
                   users GET    /users(.:format)                  users#index

使用 "Log out" link 得到这个错误:

Couldn't find User with 'id'=sign_out

与请求关联的参数是:

Request

Parameters:

{"id"=>"sign_out"}

并且无论出于何种原因,link 仍会生成 GET 请求:

Started GET "/users/sign_out" for ::1 at 2015-12-25 03:35:11 -0600
Processing by UsersController#show as HTML
Parameters: {"id"=>"sign_out"}

有人对下一步 change/try 有什么建议吗?如果您需要任何其他文件的更多信息,请告诉我。

  1. 我的 application.js 文件需要默认注释:

    //= require jquery

    //= require jquery_ujs

  2. 我的 layouts/application.haml 文件需要 CSRF 元标记:

    = csrf_meta_tags

感谢 sevenseacat 为我指明了正确的方向!