content_for 与片段缓存结合使用的解决方法
Workaround for content_for use in conjunction with fragment caching
我试图在每个元素的基础上将内容插入到我的页面的头部,所以我希望能够在部分中指定这样的内容:
# _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
Is there currently a way to get content_for to work with fragment caching on Rails 5.1?
根据设计,使用缓存时根本不会评估部分,因此唯一的解决方案是将 content_for
结果与 'real' 内容一起缓存,作为链接的历史记录补丁做了。唯一的 变通方法 是将 content_for
块移到部分之外——可以理解,这说起来容易做起来难,而且首先破坏了使用它的意义。
No ones seems to have really touched this issue for a while. Does anyone know if there's a reason why?
看起来这个问题在很多年前就被忽视了:我在 GitHub 中根本看不到任何相关的 PR。 (实际上,我在个人待办事项列表中有关于此的注释,但不知道以前有人处理过它。)
没有,没有理由没有实现此功能(如果 8 年前有一个原因,它已经消失在时间的流沙中——和无论如何可能不再适用)。如果有人有兴趣追求 PR:请做。
现在有 Rails 个打开的拉取请求:https://github.com/rails/rails/pull/39600
希望这将 "just work" 很快在 Rails 中...
免责声明:我提交了这个拉取请求
我试图在每个元素的基础上将内容插入到我的页面的头部,所以我希望能够在部分中指定这样的内容:
# _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
Is there currently a way to get content_for to work with fragment caching on Rails 5.1?
根据设计,使用缓存时根本不会评估部分,因此唯一的解决方案是将 content_for
结果与 'real' 内容一起缓存,作为链接的历史记录补丁做了。唯一的 变通方法 是将 content_for
块移到部分之外——可以理解,这说起来容易做起来难,而且首先破坏了使用它的意义。
No ones seems to have really touched this issue for a while. Does anyone know if there's a reason why?
看起来这个问题在很多年前就被忽视了:我在 GitHub 中根本看不到任何相关的 PR。 (实际上,我在个人待办事项列表中有关于此的注释,但不知道以前有人处理过它。)
没有,没有理由没有实现此功能(如果 8 年前有一个原因,它已经消失在时间的流沙中——和无论如何可能不再适用)。如果有人有兴趣追求 PR:请做。
现在有 Rails 个打开的拉取请求:https://github.com/rails/rails/pull/39600
希望这将 "just work" 很快在 Rails 中...
免责声明:我提交了这个拉取请求