Rails 7 登出路径找不到问题求助(已添加UJS仍报错)
Rails 7 登出路径不存在问题解决
核心原因
Rails 7 默认使用 Turbo 替代了原有的 UJS,原 UJS 的 method: :delete 参数不再生效,导致 DELETE 请求被当成 GET 请求发送,找不到对应路由。
解决步骤
1. 修改登出链接参数
把原链接的 method: :delete 替换为 Turbo 识别的 data: { turbo_method: :delete }:
<li class="nav-item"> <%= link_to "Log out", logout_path, data: { turbo_method: :delete }, class: "nav-link" %> </li>
2. 确认 Turbo 正确引入
检查应用布局文件(如 app/views/layouts/application.html.erb)是否包含 Turbo 引入标签:
<%= turbo_include_tags %>
若使用 Importmap,确保 config/importmap.rb 里有:
pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
并在 app/javascript/application.js 中导入:
import "@hotwired/turbo-rails"
3. 验证路由配置
运行命令 rails routes,确认输出中存在如下路由:
logout DELETE /logout(.:format) sessions#destroy
若没有,检查 routes.rb 里的 delete '/logout', to: 'sessions#destroy' 是否书写正确。
4. 确保 CSRF Token 存在
布局文件必须包含 CSRF 元标签,Turbo 会自动携带该 token:
<%= csrf_meta_tags %>
额外排查点
若以上步骤完成仍报错,可尝试:
- 清除浏览器缓存,确保新的 Turbo 代码被加载
- 查看浏览器控制台的网络请求,确认请求方法为 DELETE 而非 GET
内容的提问来源于stack exchange,提问作者Afaq Shahid Khan
相关产品推荐
相关产品推荐

