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

Rails 5页面内锚点link_to触发不必要服务器请求求助

Rails 5 锚点跳转触发服务器请求的解决方案

没错,这个问题确实和TurboLinks脱不了干系!

在Rails 5中,TurboLinks默认会拦截页面上的所有链接请求,尝试通过AJAX方式加载页面内容——哪怕是指向当前页面锚点的链接。这就导致了你遇到的情况:虽然页面能跳转到锚点位置,但服务器端还是收到了新的请求,进而让未提交的表单数据丢失。

要实现纯前端的页面内锚点跳转,你可以试试这几种方法:

  • 给单个链接禁用TurboLinks拦截
    修改你的link_to代码,直接指定锚点的href,并添加data: { turbolinks: false }属性,告诉TurboLinks不要处理这个链接:

    <%= link_to "Back to Top", "#top-page", data: { turbolinks: false } %>
    

    另外建议把你的标题标签改成用id属性(HTML5标准更推荐这种方式,兼容性更好):

    <h1 id="top-page">Blogs</h1>
    
  • 全局配置TurboLinks忽略锚点链接
    如果你有很多这类锚点链接,不想逐个添加属性,可以在TurboLinks的初始化代码里设置规则,让它自动忽略指向当前页面锚点的请求。不过这种方式灵活性稍弱,适合全局统一需求的场景。

这样修改后,点击链接就只会触发浏览器原生的锚点滚动,不会再向服务器发送请求,表单里的临时数据也就不会丢失啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:00:03