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

如何阻止Rails 7中Turbo进度条与浏览器加载指示器持续运行?

问题

我有一个集成Turbo和Stimulus的Rails 7应用,用link_to触发控制器action,功能本身正常,但点击链接后Turbo进度条和浏览器标签页的加载指示器启动后永不结束。这个链接是多处使用的点赞功能,所有UI变更都通过JavaScript实现。

链接代码:

<%= link_to "/#{controller}/#{object.id}/like", data: { "turbo-method": :patch, action: 'click->like#likeTapped', "turbo-frame": "_top" }, class: 'like-link'  do %>

Rails控制器代码:

def like
  current_user.toggle_like!(@post)
end

请问能否阻止Turbo访问以避免加载指示器启动,或让控制器返回不刷新页面、不改变滚动位置的响应?

解决方案

方法一:阻止Turbo处理该链接

直接在链接的data属性里添加turbo: false,让Turbo跳过对这个链接的处理,完全由Stimulus控制器处理点击事件:

<%= link_to "/#{controller}/#{object.id}/like", data: { "turbo-method": :patch, action: 'click->like#likeTapped', "turbo-frame": "_top", turbo: false }, class: 'like-link'  do %>

这样点击链接时Turbo不会发起请求,也就不会触发进度条和加载指示器,所有逻辑交给你的like#likeTapped Stimulus动作处理。

方法二:让控制器返回正确响应

如果仍需要Turbo发起请求,可让控制器返回204 No Content状态码,Turbo会正确识别并结束加载状态:

def like
  current_user.toggle_like!(@post)
  head :no_content
end

返回head :no_content后,Turbo收到响应就会停止进度条和加载指示器,同时不会刷新页面或改变滚动位置,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:27:33