Routing Error: No route matches [GET] "/users/sign_out" - Devise 4.1

Routing Error: No route matches [GET] "/users/sign_out" - Devise 4.1

所以我一直在创建我的 webapp,运行 遇到了 Devise 的问题。这是我的不同文件。

devise.rb 文件

config.sign_out_via = :delete
config.sign_out_via = :get if Rails.env.test?

index.html.erb 文件

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

routes.rb 文件

devise_for :users do
  get '/users/sign_out' => 'devise/sessions#destroy'
end

问题是,如果我在我的网络应用程序上按 "Logout",我会立即得到:

No route matches [GET] "/users/sign_out"

当我运行 rake routes | grep destroy_user,这是响应。

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

不确定出了什么问题。我该如何解决?我正在使用 rails 4.2.1 / devise 4.1.1。提前致谢。

如果您在使用 method: :delete 请求时遇到错误并且您看到 Matches [GET] 那么这通常是加载 UJS 文件时出现问题。

确保 application.js 已正确打包并且正在加载 jQuery 并且 Rails JavaScript 的其余部分需要正常运行。

我遇到了同样的问题。我通过在 application.js 中替换它来解决问题:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .

与:

//= require jquery_ujs
//= require jquery
//= require turbolinks
//= require_tree .

就是这么简单:)

我遇到了类似的问题 - 对我来说,我根本没有加载 jquery_ujs。 (我在最新版本的 bootstrap 中遇到了一些 js 问题,决定从 CDN 获取我需要的所有内容,注释掉我的 application.js,其中引用了 jquery_ujs。