开发者

How do I render_to_string in a rails model?

How do I render_to_string in a model in rails?

If you say that, "You should never be rendering anything from a model. Any rendering -- at all -- is the respon开发者_如何学Gosibility of the controller and view." Hear me out, or suggest a better way you might solve the problem

My model is a mailer. Just not that of emails, faxes.


Here's working code:

# 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

Tested on Rails 2.3.14. Note that I didn't find this idea, but just wrapped it in a convenience method.

Of course, don't assume that I advocate views rendering in models because of this ;-)


If you're looking for an elegant solution, perhaps you could implement an ActionFaxer::Base. You'd be able to follow the implementation of ActionMailer::Base but specialize it for faxes. Taking this approach should give you access to render_to_string.

Of note, in this case you wouldn't be adding render_to_string to a model, but instead introducing the concept of a Faxer, which would deal with models.

If you just need arbitrary support for rendering templates within a model you could code directly against erb or another template language implementation.

The nice thing about the Faxer concept is that it could abstract away more then simply rendering to include things like dispatching, queueing and guaranteeing delivery.

If you're successful, maybe when you're done you could turn it into a gem.


If you find this and want to do this on Rails 3, this gist was a big help:

https://gist.github.com/aliang/1022384

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜