2016-05-31 14 views
0

私は人形(ルビー)で開発を開始しています。次の問題があります。人形。 ERBでネストされたハッシュを繰り返し処理します

私は、テンプレートファイル内で反復したい現在のハッシュを持っています。

$database_profile_hash = 
{ 
    cpu => { 
    governor => ondemand 
    energy_perf_bias => powersave 
    } 
    sysctl => { 
    kernel.sched.min.granularity.ns => 10000000 
    kernel.sched.wakeup.granularity.ns => 15000000 
    kernel.msgmnb => 6 
    } 
    ... 
} 

そして、私の現在のテンプレートは以下の通りです:

<% @database_profile_array.each do |arrayValue| %> 
[<%= arrayValue %>] 
<% database_profile_hash[arrayValue].each do |key,value| %> 
<%= key %> <%= value %> 
<% end %> 
<% end %> 

私はハッシュを反復するために、すべての最初のレベル名を格納し、それを使用するために、配列を使用しようとしています配列反復する:

$ database_profile_array = [CPU、sysctlを、...]

しかし、私はそれを動作させることができないと私はこのような、出口を探しています:

[cpu] 
governor=ondemand 
energy_perf_bias=powersave 

[sysctl] 
vm.laptop_mode=5 
vm.dirty_writeback_centisecs=1500 
kernel.nmi_watchdog=0 

テンプレートで間違っていますか?変数 "arrayValue"の内容を渡してハッシュを反復する方法がありますか?

事前のおかげでたくさん...

答えて

7

あなたのテンプレートは、ほとんどの部分は正常に見えるが、ここではいくつかのこと。まず第一に、あなたは、変数名にピリオドを使用することはできないかもしれませんが、もっと重要なのは、キー/値のペアを区切るにはカンマを忘れないでください:

$database_profile_array = [cpu,sysctl] 
$database_profile_hash = 
{ 
    cpu => { 
    governor => ondemand, 
    energy_perf_bias => powersave, 
    }, 
    sysctl => { 
    kernel_sched_min_granularity_ns => 10000000, 
    kernel_sched_wakeup_granularity_ns => 15000000, 
    kernel_msgmnb => 6, 
    } 
} 

テンプレートでは、あなたが等号を忘れています、そしてあなたも-%>を使用することによって反復ごとに改行文字を省略する場合があります

<% @database_profile_array.each do |arrayValue| -%> 
[<%= arrayValue %>] 
<% database_profile_hash[arrayValue].each do |key,value| -%> 
<%= key %>=<%= value %> 
<% end %> 
<% end -%> 

 

編集:OP、他の人が残したコメントに注意してください。反復シーケンスが重要でない場合は、キーを参照する別の配列$database_profile_arrayを必要としない、むしろ、あなたは直接ハッシュを繰り返すことができます。また

<% @database_profile_hash.each do |key, hash| -%> 
[<%= key %>] 
<% hash.each do |key,value| -%> 
<%= key %>=<%= value %> 
<% end %> 
<% end -%> 

を、-%> ERBの人形トリムタグがhere文書化されています。

+1

トップレベルキーを別々に並べる必要はありません。最上位のハッシュを反復して、それらのキーと関連するハッシュ(値)を取得することができます。別の配列は、セクションが表示される正確なシーケンスを指定する場合や、トップレベルキーの外部指向サブセットを選択する場合にのみ便利です。 –

+1

RE答え: ' - %>'は、人形のERBトリムモードが '--'であるためです。 REコメント:彼は 'puppetlabs-stdlib'の' keys'で配列を自動的に生成することもできます。 –

+0

@JohnBollinger非常に良い点は、あなたのヒントを含めるために私の答えを編集しました。ありがとう! – drewyupdrew

関連する問題