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

Rails 7中如何让删除链接适配turbo_stream与HTML响应?

解决Rails 7中删除链接同时适配Turbo Stream和HTML跳转的问题

针对你遇到的场景,有两种直接的解决方案:

方案一:给详情页的链接单独指定Turbo禁用

在详情页的删除链接中添加data: { turbo: false },同时使用原生的method和confirm参数,让请求回退到传统HTML方式:

link_to 'delete', @object, method: :delete, confirm: 'Really?', data: { turbo: false }
  • 索引页turbo-frame内的链接保持原代码不变,依然通过Turbo Stream响应移除表格行
  • 详情页的链接会触发传统DELETE请求,控制器将响应format.html并完成跳转

方案二:在控制器中根据请求来源动态处理

修改destroy动作,判断请求是否来自turbo-frame,若不是则直接跳转:

def destroy
  @object.destroy

  respond_to do |format|
    format.turbo_stream do
      # 非turbo-frame发起的请求,直接跳转回索引页
      if request.headers['Turbo-Frame'].blank?
        redirect_to objects_path, status: :see_other
      else
        render turbo_stream: turbo_stream.remove(@object)
      end
    end
    format.html { redirect_to objects_path, notice: 'Object was successfully destroyed.' }
  end
end

这种方式不需要修改前端链接代码,控制器会自动根据请求头判断响应逻辑:

  • 来自turbo-frame的请求依然执行Turbo Stream移除行的操作
  • 详情页的请求会触发跳转,无需额外处理前端

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:30:03