0
私は以下のデータと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
をしかし、それは '<% - サービス%>であります''( '' max_logger ') 'または' 'service ==' max_logger''のように、' @ ports'と 'ports'とは異なっていますか? –
<%= service%>は正しい方法です - 間違いでした。 max_loggerが処理されているかどうかを調べるためのincludeステートメントは正しいです。 @portsについての私の理解は、erbに渡される外部定義の変数にアクセスするために@が必要なことです。そのため、erbテンプレート内で定義されているサービスのために、このサービスは必要ありません。 –
配列内の 'max_logger'値の存在をチェックすると、反復するすべての値は' 00'を出力しませんが、 'service == 'max_logger 'それで '@ service'に複数の' 'max_logger''があれば、それは一回だけです。 –