【发布时间】:2020-07-30 12:39:11
【问题描述】:
我正在使用devise,这是我的链接:
<%= link_to "Logout", logout_path, method: :delete, class: "dropdown-item" %>
这是我点击链接时的日志输出:
Started GET "/logout" for ::1 at 2020-04-16 21:24:58 -0500
ActionController::RoutingError (No route matches [GET] "/logout"):
这是它生成的 HTML:
<a class="dropdown-item" rel="nofollow" data-method="delete" href="/logout">Logout</a>
这是我routes.rb的相关部分:
devise_scope :user do
delete "logout", to: "devise/sessions#destroy"
end
【问题讨论】:
-
控制台中是否有任何 javascript 错误?你试过这个:stackoverflow.com/a/22004078/4414956 吗?
-
它作为 GET 请求发送的原因是某些东西阻止了 Rails UJS 声明的事件侦听器工作。这可能是您的 application.js 缺少
require("@rails/ujs").start()或脚本错误。如果没有该事件侦听器,它只是一个普通的旧链接,浏览器通过发送 GET 请求来处理对链接的点击。对于像注销按钮这样重要的东西,我会考虑使用button_to来强化您的应用程序,即使完全关闭 javascript 也可以使用。 -
@max 对延迟回复感到抱歉,但您关于使用
button_to的建议很有效。其他链接不是很有帮助,但button_to的建议是完美的。谢谢!如果您将其添加为答案,我会接受。
标签: ruby-on-rails devise