You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已定义路由却出现Rails 7路由错误?登出功能故障求助

问题

我正在跟随Michael Hartl的Rails教程开发一个小型演示应用,目前在登出功能上遇到问题。点击登出链接时出现路由错误,预期行为是登出用户并跳转到登录页面。我怀疑是Turbo相关的问题,已在Gemfile中添加gem 'turbo-rails'并执行bundle,但无效果。

相关代码如下:

路由文件 routes.rb

Rails.application.routes.draw do
  resources :users

  get    "/login",   to: "sessions#new"
  post   "/login",   to: "sessions#create"
  delete "/logout",  to: "sessions#destroy"

  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Defines the root path route ("/")
  root 'users#index'
end

Sessions控制器的destroy动作

def destroy
  log_out
  redirect_to root_url, status: :see_other
end

Session Helper中的log_out方法

def log_out
  reset_session
  @current_user = nil
end

视图中的登出链接

<%= link_to "Log out", logout_path, data: { 'turbo-method': :delete } %>

解决方案

1. 完成Turbo的完整安装流程

仅添加Gem并执行bundle不足以让Turbo正常工作,还需要执行初始化命令并重启服务器:

rails turbo:install
# 执行完后重启Rails服务器

这个命令会生成Turbo所需的JavaScript配置文件,并确保相关资源被引入到项目中。

Turbo对data-turbo-method的格式有严格要求,确保拼写和格式正确:

# 使用下划线形式的符号键
<%= link_to "Log out", logout_path, data: { turbo_method: :delete } %>
# 或者使用短横线形式的字符串键
<%= link_to "Log out", logout_path, data: { "turbo-method": "delete" } %>

3. 临时禁用Turbo排查问题

如果仍无法解决,可以临时禁用该链接的Turbo,用传统方式测试:

<%= link_to "Log out", logout_path, method: :delete, data: { turbo: false } %>

注意:这种方式依赖Rails UJS,若项目未配置,需要先添加gem 'jquery-rails'并完成相关配置,但优先推荐解决Turbo的问题。

4. 验证路由配置正确性

运行以下命令查看路由列表,确认logout_path对应的HTTP方法为DELETE:

rails routes

正常输出应包含:

logout DELETE /logout(.:format) sessions#destroy

如果路由显示正确,说明问题出在前端请求方法的转换上,重点排查Turbo的加载和执行情况。

5. 检查浏览器控制台错误

打开浏览器开发者工具的控制台,查看是否存在Turbo相关的JavaScript错误(比如Turbo未加载、语法错误等),这能快速定位Turbo的加载问题。

内容的提问来源于stack exchange,提问作者Danijan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:15:41