Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Я считаю, что способ, которым я обходился, состоял в создании кеша фрагментов частей заголовка, которые зависят от содержимого_поля.

поэтому он выглядит примерно так:

# application.html.erb
<head>
<% cache("#{request.env['PATH_INFO']}/header") do %>
    <title><%= yield(:page_title) %></title> 
<% end %>

поэтому этот кешированный фрагмент должен быть заполнен одновременно с кешированием действия.

Ответ 2

У меня была точно такая же проблема, и я использовал этот смысл, и он отлично работает!