Ruby Forum Ruby on Rails > Rendering partials in ActionMailer?

Posted by Shanti Braford (sbraford)
on 22.03.2006 18:33
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
Posted by Agnieszka Figiel (agnessa)
on 23.03.2006 18:46
Shanti Braford 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
Posted by Jonathan Viney (Guest)
on 24.03.2006 13:30
(Received via mailing list)
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
Posted by Shanti Braford (Guest)
on 24.03.2006 16:26
Jonathan Viney 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