在ruby erb变量中使用变量

时间:2018-12-13 10:18:00

标签: ruby variables erb

我有一个包含很多这些的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 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

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

instance_variable_get("@#{action}")