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

Rails中turbo_stream失效,报ActionController::UnknownFormat错误的解决方法求助

Rails中turbo_stream失效,报ActionController::UnknownFormat错误的解决方法求助

我之前碰到过类似的Turbo失效坑,给你列几个排查方向,你可以逐一试试:

1. 确认Turbo的基础配置与前端加载

  • 检查config/initializers/turbo.rb是否存在且配置正常,确保Turbo Drive处于启用状态,比如有没有类似配置:
    Turbo.configure do |config|
      config.drive.enabled = true
    end
    
  • 查看前端入口文件app/javascript/application.js,确认import "@hotwired/turbo-rails"这行代码没被注释——Turbo的JS必须正确加载,才能让表单发送符合要求的请求头。

2. 验证请求的Content-Type是否正确

打开浏览器开发者工具的「网络」面板,触发button_to后查看请求的Request Headers,确认是否存在Content-Type: text/vnd.turbo-stream.html。如果没有,说明Turbo没接管这个表单请求,大概率是前端加载出了问题。

3. 调整控制器的respond_to逻辑

你当前的format.turbo_stream写法如果没有对应模板文件,可能会触发格式错误,可以试试两种方式:

  • 要么在app/views/cover_recipes/create.turbo_stream.erb创建对应的Turbo Stream模板;
  • 要么直接在控制器里明确渲染逻辑,同时加个HTML fallback方便排查:
    respond_to do |format|
      if @cover_recipe.save
        format.turbo_stream { render turbo_stream: turbo_stream.append('cover_recipes', @cover_recipe) }
        format.html { redirect_to cover_recipes_path }
      else
        format.html { render :new }
      end
    end
    

4. 排查路由与缓存残留问题

  • 确认cover_recipes_path对应的路由是POST请求,且没有额外的格式约束(比如路由里不要加format: :html这类限制);
  • 执行rails tmp:clear清除所有临时缓存文件,再重启服务器——第三方gem卸载后残留的缓存经常会导致奇怪的问题。

5. 确认Turbo依赖未被误删

检查你的Gemfile里是否还保留着turbo-rails,执行bundle show turbo-rails确认gem已正确安装,避免卸载prosopite时不小心连带移除了Turbo相关依赖。

如果以上步骤都没解决问题,建议创建一个极简测试场景(比如新建空白控制器和对应的Turbo Stream逻辑),验证Turbo本身是否能正常工作,以此排除业务代码的干扰。

备注:内容来源于stack exchange,提问作者Jerome

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:59:40