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

Рельсы: использование "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 и попробую себя на промежуточном программном обеспечении стойки. спасибо

4b9b3361

Ответ 1

Процесс рендеринга сначала загружает и выполняет шаблон действия, затем украшает шаблон с выбранным макетом. Макет отображается сверху до botton, поэтому вы не можете добавить больше контента в :head после того, как :head уже отображается.

Вам нужно изменить свою стратегию. Либо поместите фрагмент в частичном, либо прикрепите его к вашим представлениям действий или используйте стратегию пост-обработки, такую ​​как модуль Rack/after_filter, чтобы напрямую изменить html-код.

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

Ответ 2

В вашем выражении content_for не должно быть знака равенства. Это должно быть:

<% content_for :head, "Something that belongs in the head" %>

Если вы определяете контент в своих шаблонах и частицах, он должен работать. Этот метод был рассмотрен в Railscast episode 8.