我在命令行中运行了以下命令:

> rails new test-turbo
> rails g controller Home index

将以下路由添加到config/routes.rb:

resources :home, only: [:index]

<%= yield %>英寸app/views/layouts/application.html.erb封装在Turbo帧标签中:

  <body>
    <%= turbo_frame_tag :foobar do %>
      <%= yield %>
    <% end %>
  </body>

app/views/home/index.html.erb个中添加了一个链接:

<%= link_to "Link to this page", home_index_path %>

Then, when clicking on that link, I get a turbo frame error: content missing

如果我将turbo帧标签移到主页/索引页面中,它可以正常工作:

app/views/home/index.html.erb

<%= turbo_frame_tag :foobar do %>
  <h1>Home#index</h1>
  <p>Find me in app/views/home/index.html.erb</p>
  <%= link_to "Link to this page", home_index_path %>
<% end %>

no error

为什么这行得通,但放进app/views/layouts/application.html.erb就不行了?它会在一天结束时生成相同的HTML,对吗?

如果有用的话,here's the GitHub repo.提交537c40a有错误,提交b42ca66工作正常.

Update: here's a gif displaying a solution that works with two turbo frames, one that is persistent across pages: top bar

推荐答案

在帧中导航时,不会呈现您的application布局.你可以从日志(log)中看到:

Rendered home/index.html.erb within layouts/turbo_rails/frame (Duration: 0.1ms | Allocations: 38)

您现在看到的是判断器和<turbo-frame id="foobar">,当您单击链接时,当前页面的html不会被响应html替换,这实际上是一个框架的全部要点.仅更新框架内的内容.您可以从Network(网络)选项卡中查看实际响应:

响应中没有Turbo帧^

要渲染您的布局,可以在控制器中将其显式设置为override turbo帧的layout:

layout "application"

仅供参考,在布局中几乎不需要涡轮框架,特别是一个包裹一切的框架.<body>元素已经起到了框架的作用,而直接位于它下面的另一个框架并不能真正为您带来任何好处.


Update

也许拥有一个完整的控制器有点太多了.我会从简单的东西开始.最简单的方法是始终呈现application个布局.跳过布局渲染只是为了加快速度的一种优化,框架之外的任何东西都会被丢弃.

您可以在布局中添加约if..else个:

...
<body>
  <% unless request.headers["Turbo-Frame"] == "main_content" %>
    <%= turbo_frame_tag :side_bar do %>
      # TODO: sidebar
    <% end %>
  <% end %>

  <%= turbo_frame_tag :main_content do %>
    <%= yield %>
  <% end %>
</body>

Ruby-on-rails相关问答推荐

我try 使用Ruby on Rails7创建一个Carbon 足迹计算器.但我无法保存和用户S对象

错误AESGCMOpen获取密码:消息身份验证失败:Golang解密GCM

在 Rails 中进行 Http 基本身份验证

为特定操作使用布局

无法连接 localhost:3000 ruby​​ on rails in vagrant

从 Authlogic 迁移到 Devise

Rails 4,使用 ActiveRecord 的原始查询

水豚 click_link 与 :href 匹配

在 Rails 4 中检测用户代理 - 读取 HTTP 标头

Rails 4网站图标问题

未定义的方法 attr_accessible

如何让空白复选框作为假传递给参数

Redis 引发需要 NOAUTH 身份验证错误,但没有设置密码

验证一个对象是否有一个或多个关联对象

如何从邮箱中获取域

对象不支持此属性或方法 Rails Windows 64bit

使 rails 控制台输出更漂亮一点

Rails Associations - has_many => :through - 但相同的模型

在 rails 3 中批量插入

错误:无法在 Mavericks 上构建 gem 原生扩展