2016-11-09 7 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 

Все содержание оказывается хорошо, но эрб просто игнорируют @address переменную. Любые идеи о том, почему? Хотя в моем коде, если я делаю puts @address, вывод является строкой, как ожидалось. Если я сделаю puts @address.class, вывод будет строкой. Что я пропажу?

Пожалуйста, обратите внимание, что выше не использует Rails

EDIT

Вот строка в моем шаблоне, который я использую для визуализации HTML:

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

использовать @address ли? Если да, то где и как именно? –

+0

@ Eric Duminil Я добавил фрагмент шаблона, который отображает эту строку – WagnerMatosUK

+0

[mcve] поможет очень. –

ответ

0

Главное, что я могу подумайте, что вы не устанавливаете переменную экземпляра в той же области, что и рендеринг 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

Это, скорее всего, случай (неправильный охват) –