Рельсы: использование "content_for" после соответствующей "доходности" внутри макета
Я думаю, что это было задано раньше, но даже если я искал Google, у меня не появилось решение.
Так вот что я пытаюсь сделать в Rails 2.3.5:
layouts/application.html.erb:
<html>
<head>
... some other stuff
<%= yield :head %>
</head>
<body>
<% content_for :head, "something that belongs in the head" %>
</body>
</html>
Обратите внимание на выход до content_for.
Я знаю, что Rails - по умолчанию - не позволяет использовать контент: head, который будет определен после. Используется - имеет смысл.
Я даже попытался подключиться к процессу визуализации шаблонов, но пока не смог добиться успеха.
Итак, моя цель - определить content_for внутри partials/templates и "выход" как-то задерживается и выполняется непосредственно перед отправкой ответа в браузер.
Кто-нибудь придумал решение?
Приветствия и благодарности,
Франк
Обновление
Я пойду с идеей weppos и попробую себя на промежуточном программном обеспечении стойки. спасибо
Ответы
Ответ 1
Процесс рендеринга сначала загружает и выполняет шаблон действия, затем украшает шаблон с выбранным макетом.
Макет отображается сверху до botton, поэтому вы не можете добавить больше контента в :head
после того, как :head
уже отображается.
Вам нужно изменить свою стратегию. Либо поместите фрагмент в частичном, либо прикрепите его к вашим представлениям действий или используйте стратегию пост-обработки, такую как модуль Rack/after_filter, чтобы напрямую изменить html-код.
Я, вероятно, попытаюсь найти лучшее решение, основанное на том, что мне действительно нужно. Если вы столкнулись с этой проблемой, скорее всего, ошибка находится где-то в другом месте, возможно, в архитектуре приложения.
Ответ 2
В вашем выражении content_for
не должно быть знака равенства. Это должно быть:
<% content_for :head, "Something that belongs in the head" %>
Если вы определяете контент в своих шаблонах и частицах, он должен работать. Этот метод был рассмотрен в Railscast episode 8.