Цикл кукол и массивов
Привет, я хотел бы помочь с тем, как закодировать это в erb в кукольный, в основном у меня есть
server::actionhost { 'details':
servername[ 'felix', 'washington', ],
ipa [ '192.168.43.5', '192.168.43.11', ],
enviro [ 'prod', 'uat', ],
}
Теперь я хочу напечатать это в файл с каждым соответствующим элементом из каждого массива в одной строке, то есть вывод из файла шаблона в моем классе должен быть таким:
felix 192.168.43.5 prod
washington 192.168.43.11 uat
Когда я попытался это сделать, я написал следующий код в мой файл шаблона:
<% servername.each do |name| -%>
<% ipa.each do |ip| -%>
<% enviro.each do |env| -%>
<%= name %> <%= ip %> <%= env %>
<% end -%>
<% end -%>
<% end -%>
но я получаю несколько рекурсивных отпечатков вместо отпечатков из каждого массива, а затем перехожу к следующему элементу массива.
Я думаю о цикле for, но не знаю, как получить длину массива в качестве аргумента цикла for. Буду признателен за некоторые рекомендации о том, как добиться правильного вывода?
Я пытался сделать что-то вроде этого, но это не с ошибками при запуске кукол?
<% for id in servername.length %>
<%= servername[id] %> <%= ipa[id] %> <%= enviro[id] %>
<% end -%>
Спасибо Дэн
2 ответа
По какой-то конкретной причине вам нужно использовать эту структуру данных? Это станет нечитаемым очень быстро, и будет очень легко сломать вещи, случайно добавив или удалив элемент из одного из массивов, а не из других. Как насчет чего-то вроде этого?
$servers = [
{
name => 'felix',
ip => '192.168.43.5',
env => 'prod',
},
{
name => 'washington',
ip => '192.168.43.11',
env => 'uat',
},
]
Тогда в эрбе работать намного проще:
<% servers.each do |server| -%>
<%= server['name'] %> <%= server['ip'] %> <%= server['env'] %>
<% end -%>
Но, если вы застряли с вашей текущей структурой данных, то это должно сделать это..
<% (1..servername.length).each do |i| -%>
Ответ Шейна Мэддена великолепен, но я думаю, что пропущен знак "@":
вместо
<% servers.each do |server| -%>
надо использовать
<% @servers.each do |server| -%>
может кто-то с более высокой репутацией, пожалуйста, прокомментируйте это в оригинальном ответе и / или подтвердите, что мой "ответ" может быть удален
Это также, как это зарегистрировано на поваренной книге марионетки третье издание
Спасибо Мэтт