Использование переменных в переменных ruby ​​erb - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть файл erb со многими из них, и я пытаюсь создать для них цикл:

<% if @addhostgroup -%>
  <% @addhostgroup.each do |k, v| %>
    <%= k %> <%= v %>
  <% end %>
<% end %>

<% if @addservicegroup -%>
  <% @addservicegroup.each do |k, v| %>
    <%= k %> <%= v %>
  <% end %>
<% end %>

Я хочу сделать что-то вроде этого:

<% %w(addhostgroup addservicegroup).each do |action| %>
  <% if @action -%>
    <% @action.each do |k, v| %>
      <%= k %> <%= v %>
    <% end %>
  <% end %>
<% end %>

Может кто-нибудь сказать мне, как использовать переменные в именах переменных erb?

Я искал путь без успеха.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Проблема в том, что блочная переменная action содержит строку с названием действия.Вы хотите позвонить @variable с динамическим именем, основанным на имени.Вы ищете этот кусок кода:

instance_variable_get("@#{action}")
0 голосов
/ 13 декабря 2018

Редактировать: проще было бы создать обычный массив вместо процентного литерала.[@addhostgroup, @addservicegroup].each do |action|.Иногда я перебираю мелочи:)

Вы можете использовать instance_variable_get вместе с массивом и итерацией в action, который вы настроили.

Добавить строку немедленновнутри каждого блока с помощью: <% instance_var_value = instance_variable_get(:"@#{action}") %>

Вы также можете отобразить значения в массив до итерации по нему.

...