Renderer: rendering to *another* format inside a renderer

My skeletal renderer looks like this

ActionController.add_renderer :pdf do |template, options|
html = render_to_string(template, options)

end

The trouble here is that render_to_string looks for a template for MIME
type PDF, e.g. show.pdf.erb. Unfortunately, that’s not what I want. I
need to get HTML. I haven’t found a straightforward option to achieve
this.

html = render_to_string(options.merge(
:template => “#{template}.html”)

That’s not pretty, but gets me halfway there. However, when I call

render :pdf => ‘show’, :layout => ‘print’

the layout is passed through to render_to_string, but ignored. If I
rename layouts/print.html.erb to layouts/print.pdf.erb, it works as long
as all partials used by that layout are available in pdf variants, too.

Now, I see that this behavior might be useful most of the time, but this
time it is exactly not what I want. Is there a clean way to make
render_to_string do what I want?

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/

Michael S. wrote:

My skeletal renderer looks like this

ActionController.add_renderer :pdf do |template, options|
html = render_to_string(template, options)

end

The trouble here is that render_to_string looks for a template for MIME
type PDF, e.g. show.pdf.erb. Unfortunately, that’s not what I want. I
need to get HTML.

WTF? What problem are you trying to solve that means you need to serve
HTML when a PDF file is requested? I don’t see how that can ever be the
right thing to do.

–Â
Marnen Laibow-Koser
http://www.marnen.org
[email protected]

Sent from my iPhone

On Saturday 03 July 2010, Marnen Laibow-Koser wrote:

The trouble here is that render_to_string looks for a template for
MIME type PDF, e.g. show.pdf.erb. Unfortunately, that’s not what I
want. I need to get HTML.

WTF? What problem are you trying to solve that means you need to
serve HTML when a PDF file is requested? I don’t see how that can
ever be the right thing to do.

I’m passing the HTML into an HTML-to-PDF converter. wkhtmltopdf in my
case. wicked_pdf does the same, but it works by alias_chain-ing render,
which I’d like to avoid. Instead, I’m defining a renderer. See

http://www.engineyard.com/blog/2010/render-options-in-rails-3/

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/