Привет, мне нужна помощь в том, как закодировать это в 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 -%>
Спасибо Дэн
Какая-либо конкретная причина, по которой вам нужно использовать эту структуру данных? Это очень быстро станет нечитаемым, и будет очень легко сломать что-то, случайно добавив или удалив элемент из одного из массивов, а не из других. Как насчет чего-то вроде этого?
$servers = [
{
name => 'felix',
ip => '192.168.43.5',
env => 'prod',
},
{
name => 'washington',
ip => '192.168.43.11',
env => 'uat',
},
]
Тогда в erb работать намного проще:
<% 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| -%>
может ли кто-то с более высокой репутацией прокомментировать это в исходном ответе и / или подтвердить, что мой "ответ" может быть удален
Так же это задокументировано на кукольная поваренная книга третье издание
Спасибо, Мэтт