1

我的 yml 文件如下所示:

defaults: &defaults
  key1: value1
  key2: value2
  ..
  ..

我的模板文件有以下内容:

<%= key1 %>
<%= key2 %>

所以我的脚本有一个文件列表,循环遍历它们,我想将 yml 对象传递给我的 erb 进行解析:

config = YAML::load(File.open('config.yml'))ENV['ENV']

file_names.each do |fn|

  file = File.new "#{fn}", "r"

  template = ERB.new file

  result = template.result

  # save file here

end

如何将我的配置对象传递给 erb 模板系统?

4

1 回答 1

5

http://ciaranm.wordpress.com/2009/03/31/feeding-erb-useful-variables-a-horrible-hack-involving-bindings/的帮助下

不是超级漂亮,但如果你把班级藏起来,那就还不错。缺点是您可能会在调用 ThingsForERB 类中不存在的其他方法时遇到问题,因此您需要先考虑一下,然后再config['key1']按照 Sergio 的建议进行更改以使用。

require 'erb'

config = {'key1' => 'aaa', 'key2' => 'bbb'}

class ThingsForERB
  def initialize(hash)
    @hash = hash.dup
  end
  def method_missing(meth, *args, &block)
    @hash[meth.to_s]
  end
  def get_binding
    binding
  end
end


template = ERB.new <<-EOF
  The value of key1 is: <%= key1 %>
  The value of key2 is: <%= key2 %>
EOF
puts template.result(ThingsForERB.new(config).get_binding)

运行时输出为:

  The value of key1 is: aaa
  The value of key2 is: bbb
于 2012-11-17T18:21:48.910 回答