2012-03-16 7 views
1

なぜないインスタンス変数のために、このERBスタンドアロンのレンダリング作業?つまり、 "<%= @ test_var%>"行の出力は空白になりますか?しないのはなぜ変数インスタンスに対して、このERBスタンドアロンレンダリング作業

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

<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

は、インスタンス変数がどこにあるか(a)は私のクラスには、次の

を持っているの答...必要性を発見しましたオブジェクトはこのメソッドの結果を渡す必要があります。

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

が私のために働いた、あなたはまた、機能get_bindingを省略して、直接結合渡すことができます。私は 'html = rhtml.result(binding)'のように文字列をhtmlにしたいと思っていました。 – portforwardpodcast

0

この

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

を試しを与えるをemail.erb

# Support templating of member data. 
    def get_binding 
    binding 
    end 

(b)にもERBの "実行" を呼び出すとき:

+0

する必要があります変数 ":文字列(NameError)" – Greg

+1

修正: ST = template.render(自己、test_var:test_var)kp666 @ – kp666

+0

感謝。私はそれをテストしていないが、それは感覚 –

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}) 

これは役に立ちます。テスト:それは「『未定義のローカル変数やメソッド` test_var』の`をevaluate_source」を与えた - あなたはテンプレートにバインディング・コンテキストを渡す必要が

0

、あなたのコードは、これは実際には動作しませんでした

@test_var = "test variable" 
template = Tilt.new('./app/scripts/email.erb') 
st = template.render(self) 
puts st 
関連する問題