簡體   English   中英

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}

它們與@services -和/或_ @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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM