2015-06-06 95 views
0

我有一个小问题,我的厨师的菜谱,我试图待办事项嵌套循环(循环环路)。我有多个水平排列,我想环路厨师模板的所有级别。现在,我下来了以下内容:厨师模板嵌套循环

模板:

 <% @countries.each do |country| %> 
       <% @countries[@country].each do |key, val| %> 
         <Publication <%= @country @key @val %> /> 
       <% end %> 
     <% end %> 

属性:

default['countries']['IE'] = {'57'=>'val2','58'=>'val2','61'=>'val','63'=>'val'} 
default['countries']['DE'] = {'110'=>'val2','113'=>'val2','115'=>'val2'} 
default['countries']['BE'] = {'134'=>'val2','138'=>'val2','139'=>'val2'} 

方药:

template "conf.xml" do 
    action :create 
    variables ({ 
     :countries => node['countries'] 
       }) 
end 

所以首先我想太多循环的国家水平,那么循环每个级别数组中使用阵列的关键和Val。我希望有人能帮助我解决这个问题。

最佳, - 泰斯

+0

是单双引号模板错字? –

+0

是的。我删除它。 – Thijs

回答

0

你可以做这样的事情,

<% @countries.each do |country, country_details| -%> 
     <% country_details.to_hash.each do |value| -%> 
     <Publication <%= "#{country} #{value[0]} #{value[1]}" %> /> 
     <% end -%> 
    <% end -%> 

的country_details最好应有哈希,然而,厨师改变了一种叫做这需要转换的ImmutableMash到哈希。 然而,在转换接收到的值后的迭代是一个数组代替的散列所以需要在阵列形式被写入,即值[0]和值[1]。

上面的代码返回以下输出,不知道你是否正在寻找此,

<Publication IE 57 val2 /> 
    <Publication IE 58 val2 /> 
    <Publication IE 61 val /> 
    <Publication IE 63 val /> 
    <Publication DE 110 val2 /> 
    <Publication DE 113 val2 /> 
    <Publication DE 115 val2 /> 
    <Publication BE 134 val2 /> 
    <Publication BE 138 val2 /> 
    <Publication BE 139 val2 />