Cuando utiliza la aplicación ERB de Ruby, proporciona una cadena de ERB.new
, por lo que ERB no puede saber realmente de dónde proviene ese archivo. Sin embargo, puede indicar al objeto de qué archivo se llegó a usar el atributo filename
:
t = ERB.new(File.read('my_template.erb')
t.filename = 'my_template.erb'
Ahora puede utilizar __FILE__
en my_template.erb
y se mencione el nombre del archivo. (Esto es lo que hace el ejecutable erb
, por lo que __FILE__
funciona en archivos ERB que ejecuta desde la línea de comandos).
Para hacer esto un poco un poco más útil, usted podría parche mono ERB con un nuevo método para leer de un archivo y establecer el filename
:
require 'erb'
class ERB
# these args are the args for ERB.new, which we pass through
# after reading the file into a string
def self.from_file(file, safe_level=nil, trim_mode=nil, eoutvar='_erbout')
t = new(File.read(file), safe_level, trim_mode, eoutvar)
t.filename = file
t
end
end
Ahora puede utilizar este método para leer los archivos ERB y __FILE__
deben trabajar en ellos, y se refieren al archivo real y no sólo (erb)
:
t = ERB.from_file 'my_template.erb'
puts t.result
me gustaría saber cómo hacer esto con erubis demasiado – 2rs2ts
NVM, es lo mismo con erubis. simplemente establece '.filename = 'my_template.erb'' – 2rs2ts