3

Json1:

{
    "Name1" : "Value1",
    "Name2" : "<%= Value2 %>"
}

Value2 は、json2 を読み取り、出力を提供するメソッドを呼び出しています。

ERB.new(File.read("json1.json")).resultjson1ではなく、2番目のjsonファイルの出力が得られます。

値 2 を 2 番目の json の出力に置き換える方法がわかりません。Value2 に対して既に評価された json の値を渡す方法はありますか?

4

1 に答える 1

2

これはあなたの問題を示しています:

ERB.new( "foo bar <%= ERB.new( 'baz' ).result  %>" ).result
=> "baz"

これは JSON とは関係ありません。これは、テンプレートの評価方法が原因で、ERB が自動的にネストされないためです。という変数に追加され:_erbout、異なる ERB オブジェクトが同じ変数を使用します。構造を順番に構築したい場合は問題ありませんが、ネストされたインクルードにはあまり適していません。

出力を生成するときに別の名前付き変数を使用するよう ERB に指示することで、問題を解決できます。

ERB.new( "foo bar <%= ERB.new( 'baz', nil, nil, :_erbout2 ).result  %>", nil, nil, :_erbout1  ).result
=> "foo bar baz"

コードが見苦しくなってきているので、抽象化することをお勧めします (特に、ネストの深さが事前にわからない場合は、変数名を生成する必要があります)。

于 2013-04-08T08:41:13.313 に答える