Rails 6 上没有路线匹配 [DELETE]“/users/sign_out”

No route matches [DELETE] "/users/sign_out" on Rails 6

我今天刚刚发现这个问题,因为我正在审查我的所有项目和我发现的所有其他帖子似乎与 Rails 的早期版本有关,或者有我研究过的解决方案。

我正在尝试注销我的用户,但出现此错误 No route matches [DELETE] "/users/sign_out"

这是我的 link,

<%= link_to "Sign Out", destroy_user_session_path, method: :delete, :class => 'navbar-link'  %>

我的路线,我也在使用 omniauth 与第三方登录。

devise_for :users, :controllers => { :omniauth_callbacks => "callbacks" }

这就是我在 devise.rb

中的内容
config.sign_out_via = :get

浏览器的控制台日志给我这个错误:

POST http://localhost:3000/users/sign_out 404 (Not Found)

Rails 日志向我显示:

Started DELETE "/users/sign_out" for ::1 at 2022-03-06 11:07:46 -0600
  
ActionController::RoutingError (No route matches [DELETE] "/users/sign_out"):

还有什么我需要检查的吗?请指教

config.sign_out_via = :get 更改为 config.sign_out_via = [:get, :delete] 解决了问题。

请参考评论(再次感谢max)。我的建议是在执行 config.sign_out_via = :get 之前检查 Rails UJS,这可能是一个解决方案。它会回来咬你(就像它刚刚对我所做的那样)。也许,检查是否有新的 Rails UJS 版本或者资产清单中是否缺少它可能会更好。