Цикл кукол и массивов

Привет, я хотел бы помочь с тем, как закодировать это в 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| -%>

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

Это также, как это зарегистрировано на поваренной книге марионетки третье издание

Спасибо Мэтт

Другие вопросы по тегам