Обходной путь для 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 лет назад, она была потеряна в песках времени - и может больше не применяться). Если кто-то заинтересован в пиаре: пожалуйста, сделайте.

Другие вопросы по тегам