3

类似于在没有 <%=? 的情况下在 ERB 中打印

但是,那里的答案是特定于 ruby​​ on rails 的。vanilla erb有类似的功能吗?

这是一个用例:

<% [
    'host_perfdata_command',
    'service_perfdata_command',
].each do |var|
    value = instance_variable_get("@#{var}")
    if value
        %><%= "#{var}=#{value}" %><%
    end
end
-%>

虽然这有效,it i%><%=s hard to r%><%ead.

4

3 回答 3

1

这有什么问题:

<% ['host_perfdata_command', 'service_perfdata_command'].each do |var| %>
    <% if (value = instance_variable_get("@#{var}")) %>
        <%= "#{var}=#{value}" %>
    <% end %>
<% end %>
于 2014-01-31T16:56:25.610 回答
1

基本上,您需要直接写入输出字符串。这是一个最小的例子:

template = <<EOF
Var one is <% print_into_ERB var1 %>
Var two is <%= var2 %>
EOF

var1 = "The first variable"
var2 = "The second one"
output = nil

define_method(:print_into_ERB) {|str| output << str }

erb = ERB.new(template, nil, nil, 'output')
result = erb.result(binding)

但是因为我觉得有义务指出它,所以需要这个是很不寻常的。正如其他答案所观察到的,有多种方法可以重写问题中的模板以使其可读,而无需直接连接到输出字符串。但这就是你在需要时会这样做的方式。

于 2014-01-31T18:54:00.307 回答
1

尝试如下:

<%= [ 'host_perfdata_command', 'service_perfdata_command' ].map do |var|
    value = instance_variable_get("@#{var}")
    value && "#{var}=#{value}"
end.compact.join( "<br>" ) -%>

然后你可以用你想要的字符串加入数组。

注意:我强烈建议您将代码移动到帮助程序中。

helper:

def commands_hash_inspect
   [ 'host_perfdata_command', 'service_perfdata_command' ].map do |var|
      value = instance_variable_get("@#{var}")
      value && "#{var}=#{value}"
   end.compact.join( "<br>" )
end

view:

<%= commands_hash_inspect -%>
于 2014-01-31T18:56:33.310 回答