我有一个包含很多这些的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变量名称上使用变量吗?
我正在寻找没有成功的方法。
非常感谢您!
答案 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}")