Когда вы используете 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
настолько близок к тому, чтобы быть блестяще полезным, но этот сбой делает его довольно неудобным.
Другие люди спрашивают или комментируют эту проблему:
- http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/d8d72f050701d44b
- http://www.golygon.com/2011/04/tips-and-tricks-in-ruby-on-rails/
- https://rails.lighthouseapp.com/projects/8994/tickets/4140-action-caching-with-caches_action-and-layout-false
И документация Rails, которая отмечает это поведение:
"ПРЕДУПРЕЖДЕНИЕ: content_for игнорируется в кэшах. Поэтому вы не должны использовать его для элементов, которые будут кэшироваться фрагментами."