为什么ERB不会渲染这一行

时间:2016-11-09 22:33:01

标签: ruby-on-rails ruby erb

我在Rails之外渲染一个erb模板。该模板将保存为html文件并发送到其他地方,所以在我的代码中我有这个:

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输出是一个字符串。我错过了什么?

请注意,以上内容不使用Rails

修改

这是我用来渲染html的模板中的一行:

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

1 个答案:

答案 0 :(得分: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