2016-11-09 41 views
1

我在Rails之外渲染一个erb模板。模板是要保存为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 

的所有内容呈现正常,但该局根本不理@address变量。任何想法为什么?虽然在我的代码中,如果我做puts @address输出是预期的字符串。如果我做puts @address.class输出是一个字符串。我错过了吗?

请注意,上面并没有使用Rails的

编辑

下面是我的模板行,我用它来呈现HTML:

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

你使用@address?如果是的话,在哪里以及如何? –

+0

@Eric Duminil我已经添加了模板的片段,呈现字符串 – WagnerMatosUK

+0

A [mcve]将有极大的帮助。 –

回答

0

主要的事情,我可以想想你是不是将实例变量设置在与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

这很可能是这种情况(错误的范围) –