Печать в erb без '<% =%>' или ruby на рельсах
Похоже на печать в ERB без <% =?
Тем не менее, ответ там специфичен для ruby на рельсах. Есть ли подобная возможность в ванильном эрбе?
Вот пример использования:
<% [
'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.
3 ответа
По сути, вам нужно записать непосредственно в выходную строку. Вот минимальный пример:
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)
Но поскольку я чувствую себя обязанным указать на это, это довольно необычно. Как уже отмечалось в других ответах, существует несколько способов переписать шаблон в вопросе, чтобы его можно было прочитать, не обращаясь непосредственно к выходной строке. Но так вы бы поступили, когда это было необходимо.
Попробуйте следующим образом:
<%= [ 'host_perfdata_command', 'service_perfdata_command' ].map do |var|
value = instance_variable_get("@#{var}")
value && "#{var}=#{value}"
end.compact.join( "<br>" ) -%>
Затем вы можете объединить массив с желаемой строкой.
ПРИМЕЧАНИЕ: я настоятельно рекомендую вам переместить код в помощник.
помощник:
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
вид:
<%= commands_hash_inspect -%>
Что не так с этим:
<% ['host_perfdata_command', 'service_perfdata_command'].each do |var| %>
<% if (value = instance_variable_get("@#{var}")) %>
<%= "#{var}=#{value}" %>
<% end %>
<% end %>