我需要一些关于 erb 模板的帮助,我似乎无法理解传递数组然后迭代它。 我的问题是这样的。 我想传递几个数组: `
device => ["eth0", "br0"],
ipaddr => ["192.168.12.166", "192.168.12.199"],
netmask => ["255.255.255.0", "255.255.255.0"],
hwaddr => '',
network => '',
gateway => ["192.168.12.254", "192.168.12.204"],
到迭代数组中的每个项目并将其打印出来的模板:
auto <%= device %> inet static
address <%= ipaddr %>
netmask <%= netmask %>
broadcast <%= broadcast %>
gateway <%= gateway %>
据我所知,我需要用 device.each |device| 做点什么。 puts device
,但我不知道语法应该是什么样子。
我相信您可以从这些片段中看出我正在尝试做什么,然后您可能会明白条目需要分开,而不是插入。
您能提供的任何帮助将不胜感激。我知道我应该在 irb 中尝试一些事情并从那里弄清楚它们,这就是我现在正在阅读的内容。
谢谢!
最佳答案
在 ruby 中使用 each 的基本语法是这样的:
array.each do |item_from_array| BLOCK
所以如果你只有一个数组,那么你可以这样做: (为了清楚起见,我会在垂直条内使用不同的名称)
<% device.each do |dev| %>
auto <%= dev %> inet static
<% end %>
然而,在移动到您的 ipaddr 数组之前,这将首先遍历您的所有设备。我猜你希望它们依次为自动、地址、网络掩码等。在这种情况下,你最好使用更“传统”的索引并循环 N 次,如下所示:
<% for idx in (0..1) %>
auto <%= device[idx] %> inet static
address <%= address[idx] %>
netmask <%= netmask[idx] %>
broadcast <%= broadcast[idx] %>
<% end %>
当然,您需要考虑数组的最大大小是多少,以及如果数组包含的条目少于其他数组时该怎么办。您可以通过执行以下操作找到所有数组的最大大小:[device,address,netmask,broadcast].map{|a| a.length}.max
你可以像这样跳过一个特定的数组:<% if idx < address.length %> address <%= address[idx] %><% end %>
关于puppet - 如何将数组传递给 ruby 中的 erb 模板并对其进行迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7079857/