如何使用ERB查找模板文件的路径?

Nea*_*uis 7 ruby erb

我使用嵌入式ruby(ERB)生成文本文件.我需要知道模板文件的目录,以便找到相对于模板文件路径的另一个文件.ERB中是否有一个简单的方法可以提供当前模板文件的文件名和目录?

我正在寻找类似的东西__FILE__,但给出模板文件而不是(erb).

mat*_*att 8

当您使用Ruby中的ERB api时,您提供了一个字符串ERB.new,因此ERB没有任何方法可以知道该文件的来源.但是,您可以使用该filename属性告诉对象它来自哪个文件:

t = ERB.new(File.read('my_template.erb')
t.filename = 'my_template.erb'
Run Code Online (Sandbox Code Playgroud)

现在你可以使用__FILE__in my_template.erb,它将引用文件的名称.(这是erb可执行文件的功能,这就是__FILE__在命令行中运行的ERB文件中的原因).

为了使这有点更有用,你可以使用一种新的方法来修补ERB以从文件中读取并设置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
Run Code Online (Sandbox Code Playgroud)

您现在可以使用此方法读取ERB文件,并且__FILE__应该在其中工作,并且引用实际文件而不仅仅是(erb):

t = ERB.from_file 'my_template.erb'
puts t.result
Run Code Online (Sandbox Code Playgroud)