如何在导轨模型中render_to_string
?
如果你这样说,“你永远不应该从模型中渲染任何东西。任何渲染 - 根本就是控制器和视图的责任。”听我说,或建议一个更好的方法来解决问题
我的模特是邮寄者。只是没有电子邮件,传真。
答案 0 :(得分:3)
如果您正在寻找一个优雅的解决方案,也许您可以实现一个ActionFaxer :: Base。您可以关注ActionMailer::Base的实施,但专门用于传真。采用这种方法应该可以访问render_to_string。
值得注意的是,在这种情况下,您不会将render_to_string添加到模型中,而是引入传真器的概念,它将处理模型。
如果您只需要在模型中渲染模板的任意支持,您可以直接针对erb或其他模板语言实现进行编码。
传真概念的优点在于它可以抽象出更多,然后简单地渲染包括调度,排队和保证交付等内容。
如果你成功了,也许当你完成后,你可以把它变成一颗宝石。
答案 1 :(得分:3)
这是工作代码:
# 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
在Rails 2.3.14上测试。请注意,我没有找到这个想法,只是用方便的方法包装它。
当然,不要因为这个而假设我提倡在模型中进行视图渲染; - )
答案 2 :(得分:0)
如果你发现这个并希望在Rails 3上做到这一点,那么这个要点是一个很大的帮助: