Есть ли обходной путь для игнорируемых content_for блоков с caches_action и: layout => false?
Когда вы используете caches_action :layout => false
в Rails 3, все блоки content_for, которые заполнены в кэшированном виде и используются в вашем макете, заканчиваются пустым. Есть ли обходной путь для этого?
например. в моем приложении у меня есть следующая довольно типичная настройка.
Вспомогательный метод, вызываемый из моих представлений, который устанавливает заголовок страницы:
# application_helper.rb
def page_title(title)
content_for(:page_title) { title }
end
Строка в моем файле макета следующая
# application.html.erb
<head>
<title><%= yield(:page_title) %></title>
</head>
И в представлении, которое я мог бы назвать
# index.html
<% page_title 'Hello!' %>
Конечно, если вы кешируете свое действие с помощью :layout => false
, это приводит к созданию пустых названий страниц, так как кеширование действий игнорирует все блоки content_for.
Нет ли обходного пути для этого? Кэширование действий с :layout => false
настолько близок к тому, чтобы быть блестяще полезным, но этот сбой делает его довольно неудобным.
Другие люди спрашивают или комментируют эту проблему:
И документация Rails, которая отмечает это поведение:
"ПРЕДУПРЕЖДЕНИЕ: content_for игнорируется в кэшах. Поэтому вы не должны использовать его для элементов, которые будут кэшироваться фрагментами."
Ответы
Ответ 1
Я считаю, что способ, которым я обходился, состоял в создании кеша фрагментов частей заголовка, которые зависят от содержимого_поля.
поэтому он выглядит примерно так:
# application.html.erb
<head>
<% cache("#{request.env['PATH_INFO']}/header") do %>
<title><%= yield(:page_title) %></title>
<% end %>
поэтому этот кешированный фрагмент должен быть заполнен одновременно с кешированием действия.
Ответ 2
У меня была точно такая же проблема, и я использовал этот смысл, и он отлично работает!