почему этот автономный рендеринг ERB не работает для переменной экземпляра - PullRequest
1 голос
/ 16 марта 2012

почему этот автономный рендеринг ERB не работает для переменной экземпляра?То есть вывод пуст для строки "<% = @test_var%>"?

@test_var = "test variable"
template = Tilt.new('./app/scripts/email.erb')
st = template.render
puts st

и email.erb

<html>
<body>
  <h1>This is it!</h1>
  <p>
      Phone Number: <%= @test_var %>
  </p>
</body>
</html>

дает

<html>
<body>
  <h1>This is it!</h1>
  <p>
   Phone Number:
  </p>

</body>
</html>

Ответы [ 4 ]

2 голосов
/ 16 марта 2012

нашел ответ ... нужно иметь

(a) в моем классе следующее, где переменные экземпляра:

  # Support templating of member data.
  def get_binding
    binding
  end

(b) также при вызове "run"на объекте ERB необходимо передать результат этого метода, например

rhtml = ERB.new(erb_str)
html = rhtml.run(get_binding)
1 голос
/ 17 марта 2012

Просто работал над чем-то похожим сегодня. Вот как я заставил его работать:

template = File.read("path/to/template.html.erb").gsub(/^  /, '')
rhtml = ERB.new(template)
@hash_of_all_i_need_in_template = method_to_get_hash_of_all_i_need_in_template
email_contents = rhtml.result(Proc.new{@hash_of_all_i_need_in_template})

Надеюсь, это поможет!

0 голосов
/ 29 января 2013

Вам необходимо передать контекст привязки в шаблон, ваш код должен быть

@test_var = "test variable"
template = Tilt.new('./app/scripts/email.erb')
st = template.render(self)
puts st
0 голосов
/ 16 марта 2012

Попробуйте это

test_var = "test variable"
template = Tilt.new('./app/scripts/email.erb')
st = template.render(self, test_var: test_var)
puts st

и

<html>
<body>
  <h1>This is it!</h1>
  <p>
      Phone Number: <%= test_var %>
  </p>
</body>
</html>
...