【发布时间】:2013-02-15 00:02:50
【问题描述】:
我正在编写一个 ERB 模板(用于 Puppet 模块),它会像这样传递一个哈希:
{"stuff" => {"foo"=>"aaa", "bar"=>"ccc"},
"other" => {"foo"=>"bbb", "bar"=>"ddd"}}
我在我的模板中对其进行迭代,生成文本行:
<% @my_data.each_pair do |k, v| -%>
<%= k %> <%= v["foo"] %>:<%= v["bar"] %>
<% end -%>
现在我想对“foo”数据应用一些映射,并使用第二个哈希值传递给模板。在伪代码中:
mappings = {"aaa" => "something", "bbb" => "somethingelse"}
<% @my_data.each_pair do |k, v| -%>
<%= k %> <%= TRANSLATE_SOMEHOW(v["foo"], mappings) %>:<%= v["bar"] %>
<% end -%>
...为了在值为“aaa”时获得“某物”,依此类推。如果“映射”中没有对应的键,我希望得到原始值。
用 Puppet 的语言做这种事情可能是可能的(通过使用一些 Ruby 代码对其进行扩展)我认为在 ERB 模板中可能更合适,但我不知道该怎么做,而且不知道 Ruby没有帮助我 - 尝试了谷歌但没有成功。
我正在寻找在 ERB 函数中实现该功能的代码或一些指向相关文档的指针,以满足我的 RTFM 乐趣。
编辑: 对于未来的读者,这里是 DigitalRoss 的答案,翻译成我上面的 ERB 示例:
<% @my_data.each_pair do |k, v| -%>
<%= k %> <%= mappings[v["foo"]] || v["foo"] %>:<%= v["bar"] %>
<% end -%>
【问题讨论】: