Назад | Перейти на главную страницу

марионетка и цикл массива

Привет, мне нужна помощь в том, как закодировать это в 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| -%>

может ли кто-то с более высокой репутацией прокомментировать это в исходном ответе и / или подтвердить, что мой "ответ" может быть удален

Так же это задокументировано на кукольная поваренная книга третье издание

Спасибо, Мэтт