Прежде всего, позвольте мне сказать, что я знаком с content_for
. Это не совсем то, что я ищу здесь.
Я хочу разрешить шаблону и любому числу парциальных составляющих, скажем, список файлов JavaScript, которые я хочу загрузить, и передать их в макет для его обработки и добавления в область <head>
. Я хочу загружать файлы только в том случае, если они действительно нужны странице, поэтому я не хотел бы просто помещать их все в макет. Также не похоже, что что-то должно обрабатываться контроллером, потому что это в основном изменения, зависящие от вида.
Я пытался использовать content_for
для возврата массива имен, но это, похоже, не работает. Это также не позволило бы нескольким частям добавлять свои собственные предпосылки в список. Я также попытался использовать вспомогательные функции в шаблоне / partials для добавления в список, а затем использовать этот список в макете, но похоже, что код макета оценивается перед кодом шаблона.
Есть идеи? Кстати, это не специфично для JavaScript; Мне просто нужен способ передать объекты Ruby из шаблона / частичного в макет.
РЕДАКТИРОВАТЬ: По запросу, пример. css_import
- это всего лишь помощник, который я написал, который эмулирует CSS @import
.
# In the layout
<style type="text/css">
<%- yield(:foobar).each do |foo| -%>
<%= css_import foo %>
<%- end -%>
</style>
# In the template
<%- content_for :foobar do
['layout', 'recipes', 'user']
end -%>
# The actual output from View -> Source
<style type="text/css">
</style>