code ruby erb templating

ruby - code - Incluyendo un archivo erb en otro



erb ruby html (4)

Desde dentro de mi archivo .erb, tuve que hacer esto:

<%= ERB.new(File.read(''pathToFile/myFile.erb''), nil, nil, ''_sub01'').result(binding) %>

Las otras respuestas en este hilo asumieron que tenía una variable con su contenido en ella. Esta versión recupera el contenido.

Estoy escribiendo una herramienta de línea de comandos que finalmente generará un informe HTML. La herramienta está escrita en ruby. (No estoy usando rieles). Estoy tratando de mantener la lógica de la aplicación en un conjunto de archivos, y las plantillas HTML (los archivos .erb) en otro conjunto.

Sin embargo, tengo un problema realmente molesto: no puedo incluir con éxito un archivo .erb en otro.

Para ser específico, estoy tratando de hacer algo como esto (en pseudo-código):

<html> <head> <style type=''text/css''> [include a stylesheet here] [and another one here] </style> </head> <body> <p>The rest of my document follows...

Ese fragmento de ejemplo es en sí mismo un archivo erb, que se invoca desde la lógica de la aplicación.

Estoy haciendo las cosas de esta manera para poder mantener mis hojas de estilo fuera de la plantilla principal para que sea más fácil / limpio mantener la aplicación. Sin embargo, el producto final (el informe) debe ser un archivo HTML único e independiente que no tenga dependencias y, por lo tanto, quiero incluir esas hojas de estilo en el encabezado del documento cuando se genera el informe.

Parece que esto debería ser fácil, pero he estado golpeando mi cabeza contra una pared (y Google, y RTMF) durante la última hora, y no estoy teniendo ninguna suerte en absoluto.

¿Cómo se supone que se haga esto? Gracias.


Las plantillas ERB pueden anidarse evaluando la sub-plantilla desde <% =%> de la plantilla principal.

<%= ERB.new(sub_template_content).result(binding) %>

Por ejemplo:

require "erb" class Page def initialize title, color @title = title @color = color end def render path content = File.read(File.expand_path(path)) t = ERB.new(content) t.result(binding) end end page = Page.new("Home", "#CCCCCC") puts page.render("home.html.erb")

home.html.erb:

<title><%= @title %></title> <head> <style type="text/css"> <%= render "home.css.erb" %> </style> </head>

home.css.erb:

body { background-color: <%= @color %>; }

produce:

<title>Home</title> <head> <style type="text/css"> body { background-color: #CCCCCC; } </style> </head>


Lo necesito en una aplicación de Sinatra, y encuentro que puedo llamarlo de la misma manera que llamé el original:

En la aplicación sinatra, llamo al índice:

erb :index

Luego, en la plantilla de índice, puedo hacer lo mismo para cualquier sub-plantilla:

<div id="controls"> <%= erb :controls %>

..que muestra la plantilla ''controls.erb''.


<%= ERB.new(sub_template_content).result(binding) %>

no funciona, cuando utiliza la utilidad erb cli, se sobrescriben varias variables _erbout y solo se usa la última.

utilízalo así:

<%= ERB.new(sub_template_content, eoutvar=''_sub01'').result(binding) %>