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

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to