我如何在一個模型欄中使用render_to_string
?如何在rails模型中render_to_string?
如果你這樣說:「你永遠不應該從模型中渲染任何東西,任何渲染 - 都是控制器和視圖的責任。」聽我說,或建議一個更好的方式,你可能會解決這個問題
我的模型是郵件。只是不是電子郵件,傳真。
我如何在一個模型欄中使用render_to_string
?如何在rails模型中render_to_string?
如果你這樣說:「你永遠不應該從模型中渲染任何東西,任何渲染 - 都是控制器和視圖的責任。」聽我說,或建議一個更好的方式,你可能會解決這個問題
我的模型是郵件。只是不是電子郵件,傳真。
這裏的工作代碼:
# instance_vars must follow the '@name' convention.
#
def render_template(template_content, options={})
local_vars = options[ :local_vars ] || {}
instance_vars = options[ :instance_vars ] || {}
view = ActionView::Base.new(Rails::Configuration.new.view_path)
instance_vars.each do | name, value |
view.instance_variable_set(name, value)
end
rendering_options = {
:inline => template_content,
:type => :builder,
:locals => local_vars
}
view.render(rendering_options)
end
測試on Rails的2.3.14。請注意,我沒有找到這個想法,但只是用一種方便的方法來包裝它。
當然,不要以爲我提倡意見,因爲這;-)
注意Rails 3使用ActionView :: Base.new(Rails.root.join('app','views')) – riley
如果你正在尋找一個優雅的解決方案,也許你可以實現一個ActionFaxer :: Base。您將能夠遵循ActionMailer::Base的實施,但專門用於傳真。採取這種方法應該可以讓你訪問render_to_string。
值得注意的是,在這種情況下,你會不會增加render_to_string到一個模型,而是引入Faxer,這將處理模型的概念。
如果你只是需要一個模型,你可以直接編寫針對ERB或其它模板語言實現內再現模板任意支持。
有關Faxer概念的好處是,它可以抽象出更多然後簡單地渲染到包括像調度,排隊和保證交貨。
如果你成功了,也許當你完成後,你可以把它變成一個寶石。
模型渲染如果你發現這一點,並希望這樣做on Rails的3,這個要點是一個很大的幫助:
Ruby的'to_s'方法怎麼樣(幾乎任何東西都可以) – bricker
不能'to_s'一個Rails視圖。 – maletor
查看?我以爲你說模特?您可能需要發佈一些僞代碼,您現在已經失去了我:) – d11wtq