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

Rails 7.0.0中ActionController::UnknownFormat TurboStream报错求助

解决Rails 7.0.0中Turbo Stream的ActionController::UnknownFormat错误

问题分析

核心问题是Rails 7.0.0项目中触发active_admin动作的请求始终以HTML格式发送,但控制器仅配置了format.turbo_stream的响应处理,导致ActionController::UnknownFormat错误。这是因为Rails 7.0.0与7.0.8在Turbo集成的默认行为上存在差异,早期版本对Turbo Stream请求的识别和处理需要显式配置。

解决方案

1. 显式指定button_to的请求格式

在_admin_btn.html.erb中,修改button_to的路由参数,添加format: :turbo_stream,确保请求明确以Turbo Stream格式发送:

<% unless user.main_admin? %> 
  <%= button_to "delete", user_path(user), method: :delete, data: { confirm: "comfirm it" }, class: "btn btn-danger" %>
  <% if user.admin? %>
    <%= button_to "Unadmin", admin_path(user, format: :turbo_stream), method: :post, class: "btn btn-danger" %>
  <% else %>
    <%= button_to "Admin", admin_path(user, format: :turbo_stream), method: :post, class: "btn btn-danger" %>
  <% end %>
<% end %>

生成的URL会包含.turbo_stream后缀,让控制器能正确识别请求格式。

2. 为控制器添加HTML格式的 fallback 处理

在active_admin动作的respond_to块中补充format.html的处理,避免请求仍以HTML格式到达时抛出错误:

def active_admin
  @user = User.find(params[:id])
  @user.toggle!(:admin)
  flash[@user.admin? ? :success : :danger] = @user.admin? ? "Admin actived" : "Admin unactived"

  respond_to do |format|
    format.turbo_stream do
      logger.debug "Responding with Turbo Stream"
    end
    format.html do
      redirect_to users_path, notice: flash[@user.admin? ? :success : :danger]
    end
  end
end

3. 升级turbo-rails gem版本

Rails 7.0.0默认依赖的turbo-rails版本较旧,存在请求格式识别问题。在Gemfile中指定与Rails 7.0.8兼容的版本:

gem "turbo-rails", "~> 1.4"

执行以下命令更新并重新安装Turbo资源:

bundle update turbo-rails
rails turbo:install

4. 验证视图文件路径

确保active_admin.turbo_stream.erb位于正确路径:app/views/users/active_admin.turbo_stream.erb(对应UserController的动作),避免因视图文件找不到导致隐式错误。

验证步骤

  1. 重启Rails服务器,确保所有修改生效。
  2. 点击"Admin"/"Unadmin"按钮,查看服务器日志,确认请求格式为turbo_stream,且日志打印Responding with Turbo Stream。
  3. 检查页面是否正确替换按钮组件,且flash消息正常显示。

内容的提问来源于stack exchange,提问作者Tín Ngô

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:57:06