ruby - 如何使用 ERB 找到模板文件的路径?

标签 ruby erb

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

我正在寻找类似于 __FILE__ 的内容,但提供的是模板文件而不是 (erb)。

最佳答案

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

t = ERB.new(File.read('my_template.erb')
t.filename = 'my_template.erb'

现在您可以在 my_template.erb 中使用 __FILE__,它将引用文件的名称。 (这就是 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

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

t = ERB.from_file 'my_template.erb'
puts t.result

关于ruby - 如何使用 ERB 找到模板文件的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12290948/

相关文章:

用于匹配 APA 引用格式的 Ruby 正则表达式

ruby-on-rails - 更改数据库的 Rspec 操作

ruby - array group_by 转换日期

ruby - 使用 keep_if 的数组过滤器

Ruby 定义运算符过程

ruby - 为什么这个绑定(bind)不起作用

ruby - 使用 Middleman 在 Markdown 中渲染 ERb 模板的部分

ruby - 多个区 block 的 yield

ruby-on-rails-3 - 环绕.vim : deleting embedded ruby tags

javascript - 如何动态创建包含类属性的列表