2
我正在寫一個ERB模板(一個木偶模塊)被傳遞一個哈希這樣的:如何將映射應用於Puppet/Ruby ERB模板中的值?
{"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 -%>
完美的,我把它移植到我的ERB模板和它的工作就像一個魅力。不知道Ruby我在尋找一些函數/方法,而(foo || bar)構造就夠了......謝謝。 – Luke404 2013-02-15 08:23:43