2

私は次のようなハッシュを渡される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 -%>

次に、テンプレートに渡す2番目のハッシュを使用して、「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を楽しむための関連ドキュメントへのポインターを探しています。

編集:将来の読者のために、上記の私のERBの例に翻訳されたDigitalRossの回答は次のとおりです。

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

1 に答える 1

2

明確にするためにerbのものを削除して、これがあなたがやりたいことです。(p()関数は引数を出力するだけです。これはirbで試すことができます。)

@my_data.each do |k, v|
  f, b = v['foo'], v['bar']
  p(mappings[f] || f)
  p(mappings[b] || b)
end
于 2013-02-15T02:04:56.383 に答える