ERB 模板嵌套变量 - 访问基于数组元素的散列键
ERB template nested variable - accessing a hash key based on array element
我有以下数据和 erb 模板:到端口号的散列映射服务和一组服务。
我为每个服务遍历数组,我需要访问散列以获取当前正在处理的服务的端口号。我似乎不允许按照下面的方式嵌套变量。有没有更好的方法?
ports = {"max-api" => 83, "max-logger" => 82, "max-data" => 84}
services = %w( max_api max_data max_logger )
<% @services.each do |service| %>
<% if service.include?("max_logger") %>
shell: echo <%= service %>:<%= @ports["<%= service %>"] %>
<% else %>
shell: echo <%= service %>:<%= @ports["<%= service %>"] %>00
<% end %>
<% end %>
最简单的示例我有 erb 模板
<% @services.each do |service| %>
<%= @ports[<%= service %>] %>
<% end %>
如果我尝试 运行 我的代码,我会收到以下错误:
Chef::Mixin::Template::TemplateError
------------------------------------
(erubis):2: syntax error, unexpected '<', expecting ']'
_buf << ( @ports[<%= service ).to_s; _buf << ']...
^
(erubis):2: unterminated string meets end of file
我最近意识到,如果名称(数组值、哈希键)不匹配,它们将无法工作:
{"max-api" => 83, "max-logger" => 82, "max-data" => 84}
它们的区别在于 -
and/or _
与 @services
:
%w( max_api max_data max_logger )
稍微调整了一下 @services
:
ports = {'max-api' => 83, 'max-logger' => 82, 'max-data' => 84}
services = %w(max-api max-data max-logger)
services.each do |service|
puts "shell: echo #{service}:#{ports[service]}#{'00' if service != 'max-logger'}"
end
# => shell: echo max-api:8300
# => shell: echo max-data:8400
# => shell: echo max-logger:82
我有以下数据和 erb 模板:到端口号的散列映射服务和一组服务。
我为每个服务遍历数组,我需要访问散列以获取当前正在处理的服务的端口号。我似乎不允许按照下面的方式嵌套变量。有没有更好的方法?
ports = {"max-api" => 83, "max-logger" => 82, "max-data" => 84}
services = %w( max_api max_data max_logger )
<% @services.each do |service| %>
<% if service.include?("max_logger") %>
shell: echo <%= service %>:<%= @ports["<%= service %>"] %>
<% else %>
shell: echo <%= service %>:<%= @ports["<%= service %>"] %>00
<% end %>
<% end %>
最简单的示例我有 erb 模板
<% @services.each do |service| %>
<%= @ports[<%= service %>] %>
<% end %>
如果我尝试 运行 我的代码,我会收到以下错误:
Chef::Mixin::Template::TemplateError
------------------------------------
(erubis):2: syntax error, unexpected '<', expecting ']'
_buf << ( @ports[<%= service ).to_s; _buf << ']...
^
(erubis):2: unterminated string meets end of file
我最近意识到,如果名称(数组值、哈希键)不匹配,它们将无法工作:
{"max-api" => 83, "max-logger" => 82, "max-data" => 84}
它们的区别在于 -
and/or _
与 @services
:
%w( max_api max_data max_logger )
稍微调整了一下 @services
:
ports = {'max-api' => 83, 'max-logger' => 82, 'max-data' => 84}
services = %w(max-api max-data max-logger)
services.each do |service|
puts "shell: echo #{service}:#{ports[service]}#{'00' if service != 'max-logger'}"
end
# => shell: echo max-api:8300
# => shell: echo max-data:8400
# => shell: echo max-logger:82