{"foo"=>"aaa", "bar"=>"ccc"}, "other" => {"foo-6ren">
gpt4 book ai didi

ruby - 如何将映射应用于 Puppet/Ruby ERB 模板中的值?

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:28 26 4
gpt4 key购买 nike

我正在编写一个 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 的兴趣。

编辑:对于 future 的读者,这里是 DigitalRoss 的回答,已翻译成我上面的 ERB 示例:

<% @my_data.each_pair do |k, v| -%>
<%= k %> <%= mappings[v["foo"]] || v["foo"] %>:<%= v["bar"] %>
<% end -%>

最佳答案

为了清晰起见,删除了 erb 内容,这就是您想要执行的操作。 (p() 函数只打印它的参数。您可以在 irb 中尝试这个。)

@my_data.each do |k, v|
f, b = v['foo'], v['bar']
p(mappings[f] || f)
p(mappings[b] || b)
end

关于ruby - 如何将映射应用于 Puppet/Ruby ERB 模板中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com