4

我试图在每个元素的基础上将内容插入页面的头部,所以我希望能够在部分中指定这样的内容:

# _partial.html.erb
<%= content_for :style %>
  .element {
    background-color: red;
  }
<% end %>

并将其放在我页面的顶部:

# application.html.erb
<head>
  <style>
    <%= content_for(:style) %>
  </style>
</head>

但是元素部分被片段缓存,content_for在缓存中被忽略。

它在 Rails 文档中声明,content_for不适用于片段缓存的工作元素:

WARNING: content_for is ignored in caches. So you shouldn't use it for elements that will be fragment cached. http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for

目前有没有办法content_for在 Rails 5.1 上使用片段缓存?似乎有一段时间没有人真正触及过这个问题。有人知道是否有原因吗?


这里有一些较早的提及:

对于 caches_action 和 :layout => false 的忽略 content_for 块是否有解决方法?

content_for 在开发中工作但不是在生产中工作?

https://gist.github.com/stackng/891895

https://rails.lighthouseapp.com/projects/8994/tickets/3409-content_for-and-fragment-caching

4

2 回答 2

5

现在有 Rails 拉取请求:https ://github.com/rails/rails/pull/39600

希望这将很快在 Rails 中“正常工作”......

免责声明:我提交了这个拉取请求

于 2020-06-11T19:56:59.773 回答
4

目前有没有办法让 content_for 在 Rails 5.1 上使用片段缓存?

按照设计,在使用缓存时根本不会评估部分内容,因此唯一的解决方案是将content_for结果与“真实”内容一起缓存,就像链接的历史补丁所做的那样。唯一的解决方法是将content_for块移到部分之外——这说起来容易做起来难,而且首先破坏了使用它的意义。

似乎有一段时间没有人真正触及过这个问题。有人知道是否有原因吗?

看起来这个问题在很多年前就被忽视了:我在 GitHub 上根本看不到相关的 PR。(我实际上在我的个人待办事项列表中有一个关于这个的注释,但不知道它以前已经处理过。)

,没有理由不实现此功能(如果 8 年前有原因的话,它已经被时间的流沙淹没了——而且可能不再适用)。如果有人有兴趣追求 PR:请这样做。

于 2018-07-20T17:04:58.057 回答