ERB模板嵌套变量 - 基于数组元素访问哈希键

时间:2017-05-22 03:59:44

标签: ruby-on-rails ruby erb

我有以下数据和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

1 个答案:

答案 0 :(得分:2)

我最近意识到如果名称不匹配(数组值,哈希键),它们将无法工作:

{"max-api" => 83, "max-logger" => 82, "max-data" => 84}

它们与-的{​​{1}}和/或_不同:

@services

稍微调整一点%w( max_api max_data max_logger )

@services