# Render :inline in ActionMailer

**URL:** <https://www.ruby-forum.com/t/render-inline-in-actionmailer/184735>\
**Category:** Rails\
**Created:** [March 7, 2010, 5:51pm UTC](https://www.ruby-forum.com/t/render-inline-in-actionmailer/184735 "2010-03-07T17:51:18Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Thilo-Alexander\_Gin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/3e96dc/32.png) [@Thilo-Alexander\_Gin](https://www.ruby-forum.com/u/Thilo-Alexander_Gin)\
**Post date:** [March 7, 2010, 5:51pm UTC](https://www.ruby-forum.com/t/render-inline-in-actionmailer/184735/1 "2010-03-07T17:51:18Z")

</div>

Hello everyone,

while attempting to figure out how to render an inline template as body  
of a  
mail message in an ActionMailer I am somewhat lost and hope that  
somebody on  
the list can point me into the right direction.

My current code looks like this (with minor deletions to improve  
readability):

– 8\< –  
class RegistrationMailer \< ActionMailer::Base  
def confirmation(registration)  
recipients “#{registration.full\_name} \<#{registration.email}\>”  
from “\<#{registration.event.organizer\_alias\_email}\>”  
sent\_on Time.now

```
tmpl = registration.event.registration_confirmation_template
subject tmpl.subject

part "text/plain" do |p|
  p.body render :inline => tmpl.body, :registration => registration
end

```

end  
end  
– 8\< –

Unfortunately, calling render throws an exception about a nil object:

| You have a nil object when you didn’t expect it!  
| You might have expected an instance of Array.  
| The error occurred while evaluating nil.each

– 8\< –  
/var/lib/gems/1.8/gems/actionpack-2.3.4/lib/action\_view/base.rb:310:in  
`_evaluate_assigns_and_ivars' /var/lib/gems/1.8/gems/actionpack-2.3.4/lib/action_view/renderable.rb:31:in`send’  
/var/lib/gems/1.8/gems/actionpack-2.3.4/lib/action\_view/renderable.rb:31:in  
`render' /var/lib/gems/1.8/gems/actionpack-2.3.4/lib/action_view/base.rb:301:in`with\_template’  
/var/lib/gems/1.8/gems/actionpack-2.3.4/lib/action\_view/renderable.rb:30:in  
`render' /var/lib/gems/1.8/gems/actionpack-2.3.4/lib/action_view/base.rb:264:in`render’  
/var/lib/gems/1.8/gems/actionmailer-2.3.4/lib/action\_mailer/base.rb:567:in  
`render' /raid/home/tg/workspace/MHNVeranstaltungen/app/models/registration_mailer.rb:30:in`confirmation’  
/var/lib/gems/1.8/gems/actionmailer-2.3.4/lib/action\_mailer/part\_container.rb:28:in  
`part' /raid/home/tg/workspace/MHNVeranstaltungen/app/models/registration_mailer.rb:28:in`confirmation’  
– 8\< –

Line 310 maps to the “elsif” branch in base.rb, so most likely  
controller.request.template\_format is nil:

| def template\_format  
| if defined? @template\_format  
| @template\_format  
| elsif controller && controller.respond\_to?(:request)  
| @template\_format = controller.request.template\_format.to\_sym  
| else  
| @template\_format = :html  
| end  
| end

But, what would be the right way to set it?

I know that my approach somewhat violates the MVC pattern. An  
alternative  
would probably be to call render from within the corresponding view.

Thanks,  
Thilo
