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