2012-03-16 51 views
1

爲什麼ERB獨立渲染不能用於實例變量?那是「<%= @test_var%>」行的輸出爲空?爲什麼ERB獨立渲染不能用於實例變量

@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> 

回答

2

找到了答案......需要有

(一)在我所在班級的實例變量如下:

# Support templating of member data. 
    def get_binding 
    binding 
    end 

(B)也呼籲ERB「運行」時,對象必須傳遞此方法的結果,例如

rhtml = ERB.new(erb_str) 
html = rhtml.run(get_binding) 
+0

爲我工作,你也可以省略函數get_binding並直接傳遞綁定。我想把字符串作爲html,所以我做了'html = rhtml.result(binding)' – portforwardpodcast 2013-06-02 22:57:56

0

試試這個

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> 
+0

這並沒有實際工作 - 這給了「'evaluate_source‘:未定義的局部變量或方法'test_var’爲」測試變量「:String(NameError)」 – Greg 2012-03-16 07:11:46

+1

修復: st = template.render(self,test_var:test_var) – kp666 2014-02-21 07:12:34

+0

謝謝@ kp666。我沒有測試,但它有意義 – 2014-02-21 10:12:09

1

今天剛剛開始類似的工作。這是我得到它的工作原理:

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

您需要通過結合上下文的模板,你的代碼應該是

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