0

これを行う方法を理解するためにすでに長い時間を費やしてきました。調査もしましたが、正しいアプローチが見つかりませんでした...?

基本的に私は次のようなことをしようとしています:

types = ['type1','type2']
classes = ['class1','class2']

classes.each do |class|
    types.each do |type|

        template "/files/filename.txt" do
          source "source_file.erb"
          owner "root"
          group "root"
          mode "0440"
          variables({
            :pri_areas => node['area']['#{type}']['#{class}'],
            :rev_areas => node['area']['#{type}']['#{class}']
        })
        end

    end
end

明らかに、すべての属性が既に定義されているので、その正面からはすべてが正常に見えます..変数を使用してそのような配列を使用してループを取得することはまだできませんか? 多分別の別のアプローチ?

アイデア/ヘルプはありますか?

どうもありがとう。

4

1 に答える 1

2

コードには、適切に機能する前に修正する必要があるいくつかの問題があります。

そもそも、classはRubyの予約キーワードなので変数名としては使えません。別のものを使用する必要がありますklass

第二に、class(or klass) だけでなく、typeすでにループ内の文字列です。したがって、文字列補間を試みる必要はありません。これを直接使用できます:

variables({
  :pri_areas => node['area'][type][klass],
  :rev_areas => node['area'][type][klass]
})

文字列補間が機能しなかった理由は、ruby が 2 つの異なる種類の文字列リテラルを認識しているため"です'。違いは、 で区切られたものは'文字列の補間を許可せず、通常、文字列内の文字列以外のものとして解釈しないことです。で区切られた文字列でのみ、 の"ような文字列補間を実行し、 のよう"#{foo}"なエスケープ シーケンスを使用できます\n

于 2013-10-01T17:04:41.743 に答える