Rendering partials in ActionMailer?

Hello,

Is anyone out there rendering partials successfully in ActionMailer
templates?

I am having trouble with this, and wasn’t sure if it was my
configuration or something with a version of Rails I’m running.

We’ve got over 15 mailer templates, all working like a charm.

But we have a piece of shared code, that we’d really like to not have to
copy & paste into 5 other different templates.

In case it has to do with my setup, here’s a bit about it:

In models/

class Mailer < ActionMailer::Base

end

In views/mailer/ - I have:
_test.rhtml - the partial I’m trying to render
send.rhtml - the template calling the partial

In send.rhtml, I’ve tried various incarnations of:

<%= render :partial => “test” %>

<%= render_partial(“mailer/test”) %>

<%= render_partial(“test”) %>

<%= render_file(“mailer/_test.rhtml”, false) %>

(one at a time, of course) … all to no avail.

The Error:

undefined method `controller_path’ for Mailer:Class

My Config:

Ruby 1.8.4
Edge Rails: Rev 3476
OS X Tiger latest / all updates applied.

Any insight would be mucho appreciated!!

  • Shanti

http://sablog.com/ - dispatches from the garage
http://sproutit.com/ - webapps for small businesses

ps. I have a ticket opened here, but I hope I can close it soon (due to
user error not a limit in Rails!):
http://dev.rubyonrails.org/ticket/4326

Shanti B. wrote:

Hello,

Is anyone out there rendering partials successfully in ActionMailer
templates?

Hi,

I haven’t tried with partials since helpers worked fine for me, maybe
you could take this route as well.


Agnieszka

I’ve got this piece of code in an AM template:

<%= render :partial => ‘…/shared/listing’ %>

I think the default path is the current path of the AM template, so
…/ puts it down into app/views/. That line will render
app/views/shared/_listing.rhtml.

-Jonathan

Jonathan V. wrote:

I’ve got this piece of code in an AM template:

<%= render :partial => ‘…/shared/listing’ %>

I think the default path is the current path of the AM template, so
…/ puts it down into app/views/. That line will render
app/views/shared/_listing.rhtml.

Jonathan - you’re a lifesaver. You just saved me from 6 copy&paste jobs
anytime the template changed =)

Posted the workaround to this ticket for future googlers:
http://dev.rubyonrails.org/ticket/2926

  • Shanti