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

Rails 7 + Turbo Frames页面刷新后内容还原问题咨询

解决Turbo Frames刷新后内容还原的问题

你不需要改用Turbo Streams,问题核心在于Turbo Frames默认仅做前端DOM替换,不会更新浏览器URL或让服务器记住当前内容状态,刷新时服务器会根据当前URL返回初始页面内容,导致框架内容还原。可以通过以下两步解决:

1. 让导航链接更新浏览器URL

修改链接,添加data-turbo-action="advance"属性,点击链接时既替换Turbo Frame内容,也更新浏览器历史记录和URL:

// First Page
= turbo_frame_tag "main" do
  %p Testing Turbo Out
  link_to "Test it", other_page_path, data: { turbo_frame: "main", turbo_action: "advance" }

2. 服务器端根据URL渲染对应内容

把main框架的内容抽成可复用的部分模板,让不同页面的控制器动作指定要渲染的内容,确保刷新时服务器能返回正确的框架内容:

  • 创建首页内容的部分模板app/views/shared/_home_content.html.erb:
    %p Testing Turbo Out
    
  • 创建其他页面内容的部分模板app/views/shared/_other_content.html.erb:
    %p is this thing on?
    
  • 在首页控制器动作中指定渲染的部分:
    def index
      @content_partial = "home_content"
    end
    
  • 在other_page控制器动作中指定渲染的部分:
    def other_page
      @content_partial = "other_content"
    end
    
  • 统一在页面中渲染main框架:
    = turbo_frame_tag "main" do
      render "shared/#{@content_partial}"
    

配置完成后,点击导航链接会更新URL,刷新页面时服务器会根据当前URL对应的动作渲染正确内容到main框架,不会再出现内容还原的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:15:32