2017-07-14 114 views
0

我試圖寫出一個html文件到我們的文件系統,所以它可以壓縮併發送出去,以及其他一些東西。Rails 2.2.2:在模型中渲染帶有良率的模板

我在我們的app/views/layouts文件夾中有一個我想使用的erb模板。該模板有一個標準的<%= yield %>調用,在這種情況下,我有一堆預生成的html,作爲我的方法中的一個字符串,我想用yield替換yield。

所以,我需要做的是這樣的(僞):

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 

這樣可能比較簡單,我嘗試只是GSUB了<%= yield %>,並用我的文字取代它,但感覺就像警察出...

順便說一句,如果它更容易得到結果作爲一個字符串,例如使用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

最後我做這樣的:

我改變了模板,以便代替<%= yield %>塊,我有

<%= @content %> 

然後我把它叫做是這樣的:

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} 

binding是當前範圍的狀態(即具有所有相同的變量等),所以它使用我剛剛定義的@content。這可能不是最乾淨的方式,它不是我所要求的,但我認爲我會把它留在這裏作爲答案。我仍然很想知道是否可以使用<%= yield %>而不是使用實例var(比如我)或局部變量(如MátéSolymosi的答案)來完成。