Обходной путь для content_for для использования в сочетании с фрагментным кэшированием
Я пытаюсь вставить содержимое в заголовок моей страницы для каждого элемента, поэтому я хотел бы иметь возможность указать что-то вроде этого в частичном:
# _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
Есть ли в настоящее время способ получить content_for
работать с фрагментным кешированием на Rails 5.1? Никто, кажется, действительно не затрагивал эту проблему некоторое время. Кто-нибудь знает, если есть причина, почему?
Здесь есть несколько старых упоминаний:
Есть ли обходной путь для игнорируемых блоков content_for с caches_action и: layout => false?
content_for работает в разработке, а не в производстве?
https://gist.github.com/stackng/891895
https://rails.lighthouseapp.com/projects/8994/tickets/3409-content_for-and-fragment-caching
1 ответ
Сейчас для этого открыт пул-реквест Rails: https://github.com/rails/rails/pull/39600
Надеюсь, это скоро будет "просто работать" в Rails...
Отказ от ответственности: я отправил этот запрос на перенос
Есть ли в настоящее время способ заставить content_for работать с кэшированием фрагментов в Rails 5.1?
По замыслу, частичное вообще не оценивается при использовании кэша, поэтому единственным решением будет кэширование content_for
результат вместе с "реальным" контентом, как это сделал исторический патч. Единственный обходной путь, чтобы переместить content_for
блокировать вне частичного - что понятно легче сказать, чем сделать, и подрывает смысл его использования в первую очередь.
Никто, кажется, действительно не затрагивал эту проблему некоторое время. Кто-нибудь знает, если есть причина, почему?
Похоже, что проблема исчезла с поля зрения много лет назад: я не вижу соответствующего пиара в GitHub. (У меня на самом деле есть примечание об этом в моем личном списке задач, но я понятия не имел, над этим ранее работали.)
Нет, нет никаких причин, почему эта функциональность не была реализована (если была причина 8 лет назад, она была потеряна в песках времени - и может больше не применяться). Если кто-то заинтересован в пиаре: пожалуйста, сделайте.