2016-11-09 5 views
1

私はerbテンプレートをRailsの外にレンダリングしています。私のコードで私はこれを持っているので、テンプレートは、HTMLファイルとして保存し、別の場所に送信することがある。ERBがこの行をレンダリングしない理由

erb_file = "templates/banners/#{template}.html.erb" 

erb_str = File.read(erb_file) 

@city = options[:city] 
@address = "#{@campaign.open_house_day} #{@case.open_house_from.strftime('%d/%m')} kl. #{@case.open_house_from.strftime('%H.%M')}-#{@case.open_house_to.strftime('%H.%M')}" 
... 

renderer = ERB.new(erb_str) 
result = renderer.result(binding) 

FileUtils.mkdir_p('temp') unless File.directory?('temp') 

File.open('temp/index.html', 'w') do |f| 
    f.write(result) 
end 

すべてのコンテンツが微細化されていますが、ERBは、単に@address変数を無視します。理由の任意のアイデア?私のコードでは、私がputs @addressを実行すると、出力は期待どおりの文字列になります。私がputs @address.classの場合、出力は文字列です。私は行方不明ですか?

<span class="wday"><%= @address %></span> 
+0

あなたは@addressを使用していますか?もしそうなら、どこでどのくらい正確に? –

+0

@Eric Duminilその文字列をレンダリングするテンプレートのスニペットを追加しました – WagnerMatosUK

+0

[mcve]は大いに役立ちます。 –

答えて

0

私ができる主なもの:

上記

EDIT

は、ここで私は、HTMLをレンダリングするために使用私のテンプレートでは、ラインのレールを使用していないことに注意してくださいERBレンダリングと同じスコープでインスタンス変数を設定していないことを考えてください。

また、ERBにaddressを定義し、これを試すことができます。

# make sure address is set first 
# if it's not, you have a scoping problem 
raise(ArgumentError) if @address.nil? 

binding.local_variable_set :address, @address 

puts ERB.new("<%= address %>").result binding 
+0

これはそうかもしれません(範囲が間違っています) –

関連する問題