在 ruby erb 变量中使用变量

Using variables in ruby erb variables

我有一个包含很多这些的 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 变量名上使用变量吗?

我一直在寻找一种方法,但没有成功。

非常感谢!

编辑:一种更简单的方法是制作一个普通数组而不是百分比文字。 [@addhostgroup, @addservicegroup].each do |action|。有时我会忽略一些小事:)

您可以将 instance_variable_get 与数组一起使用,并迭代到您已设置的 action 中。

在每个块中立即添加一行: <% instance_var_value = instance_variable_get(:"@#{action}") %>

您还可以在遍历数组之前将值映射到数组中。

问题是块变量 action 包含一个带有动作名称的字符串。您想根据名称使用动态名称调用 @variable。您正在搜索这段代码:

instance_variable_get("@#{action}")