我正在尝试按每个元素将内容插入页面的头部,因此我希望能够在部分内容中指定类似的内容:
# _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上使用片段缓存?一段时间以来,似乎没有人真正碰过这个问题。有谁知道为什么吗?
这里有一些较早的提及:
Is there a workaround for ignored content_for blocks with caches_action and :layout => false?
content_for works in development but not production?
https://gist.github.com/stackng/891895
https://rails.lighthouseapp.com/projects/8994/tickets/3409-content_for-and-fragment-caching
答案 0 :(得分:5)
答案 1 :(得分:0)
当前是否有一种方法可以使content_for在Rails 5.1上使用片段缓存?
根据设计,在使用缓存时根本不会评估局部变量,因此唯一的解决方案是将content_for
结果和“真实”内容一起缓存,就像链接的历史补丁一样。唯一的解决方法是将content_for
块移到局部对象之外–说起来容易做起来容易,这很容易理解,并且破坏了首先使用它的意义。
似乎有一段时间没有人真正碰过这个问题。有谁知道为什么吗?
看起来这个问题早在很多年前就不为人所知:我在GitHub上根本没有相关的PR。 (我实际上在我的待办事项清单中有关于此的注释,但不知道以前曾做过。)
否,没有任何理由未实现此功能(如果8年前有原因,它已经被浪费了一段时间,并且无论如何可能不再适用)。如果有人有兴趣追求PR:请这样做。