2017-07-14 3 views
0

htmlファイルを私たちのファイルシステムに書き出そうとしているので、他のものと一緒に圧縮して送り出すことができます。Rails 2.2.2:モデル内でyieldを使ってテンプレートをレンダリングする

app/views/layoutsフォルダーに私が使用したいerbテンプレートがあります。そのテンプレートには標準の<%= yield %>呼び出しがあります。このインスタンスでは、私のメソッドの文字列として、あらかじめ生成されたhtmlの束を持っています。

だから、私はこのような何か(擬似コード)を実行する必要があります。

string = "<div>This is some <strong>html</strong></div>" 
erb_template = "app/views/layouts/my_layout.html.erb" 
output_filename = "/tmp/output.html" 

#something like this... 
render_to_file(erb_template, output_filename) do 
    string 
end 

私はちょうど<%= yield %>をGSUB、私のテキストに置き換えることをしようとすることは単純かもしれませんが、それは警官のように感じていますout ...

Btw文字列として結果を得るのが簡単なら、例えばrender_to_stringを使用して、それをファイルに直接書き込んでも問題ありません。

編集:<%= yield %><%= @content %>に変更しようとしましたが、両方とも「保護されたメソッド呼び出し」エラーが発生しました:

c = ActionController::Base.new() 
html = c.render_to_string :template => erb_template, :layout => false, :locals => {:content => string} 

c = ApplicationController.new() 
html = c.render_to_string :template => erb_template, :layout => false, :locals => {:content => string} 

答えて

1

はこれを試してみてください:

ActionView::Base.new(ActionController::Base.view_paths). 
    render(template: "your/template", locals: { foo: "bar" }) 

はこれが正常にviews/your/template.html.erbでテンプレートをレンダリングする必要があります。

<h1>My template</h1> 
<div>Foo: <%= foo %></div> 
0

私はこのようにそれをやってしまった:

string = "<div>This is some <strong>html</strong></div>" 
erb_template = "app/views/layouts/my_layout.html.erb" 
output_filename = "/tmp/output.html" 

template = ERB.new(File.read(erb_template)) 
@content = string  
html = template.result(binding) 
File.open(output_filename, "w"){|f| f.puts html} 

:代わりに<%= yield %>ブロックの、私は

<%= @content %> 

を持っていた私は、このようにそれを呼ばれるように、私は、テンプレートを変更し

bindingは、現在のスコープの状態です(つまり、すべて同じ変数などを使用しています)。したがって、私が定義した@contentが使用されます。これはおそらく最もクリーンな方法ではないかもしれませんが、それは私が求めているものではありませんが、とにかく答えとしてここに残しておくと思いました。私はまだそれが<%= yield %>で行うことができるかどうかを知りたいのは興味がありますが、インスタンスのvar(私の持つような)やローカル変数(MátéSolymosiの答えのような)を使うのではありません。

関連する問題