Forum: Ruby on Rails cannot access instance variable in mailer view

Posted by Stephen Huey (Guest)
on 2011-05-28 00:17
(Received via mailing list)
Action Mailer is detecting my HTML view but not evaluating any
instance variables I'm referencing in it.  Here is my mailer:

class Emailer < ActionMailer::Base

  def send_default(recipient, subject, message, sent_at)
    @body = message
    mail(:to => recipient, :subject => subject)
  end

end


I have a view called

<!DOCTYPE html>
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-
Type" />
  </head>
  <body>
    This is an HTML email: <br />
    <%= @body %>
    <br />
    End of the body.
  </body>
</html>


When I receive the email in Gmail, here is all I see:

This is an HTML email:

End of the body.


Nothing is outputted between those 2 sentences!  Any ideas as to
what's happening?  I verified that in the mailer method, @body has a
value.  I'm using Rails 3.0.7 and Ruby 1.9.2 and following this guide:

http://guides.rubyonrails.org/action_mailer_basics.html
Posted by David Kahn (dkahn)
on 2011-05-28 01:01
(Received via mailing list)
On Fri, May 27, 2011 at 4:40 PM, Stephen Huey <stephenhuey@gmail.com> 
wrote:

> end
>  <body>
>    This is an HTML email: <br />
>    <%= @body %>
>    <br />
>    End of the body.
>  </body>
> </html>
>


Hmmm... I just checked as I am doing just about the same thing. Your 
code
looks ok, the only difference with mine is I am naming the class 
variable
@body_text. I am wondering if @body for you might be getting renamed
somewhere? Its a long shot but try renaming the variable. Also, you can 
put
a break point inside the mailer view I think ---  <%= debugger; @body 
%>....
then you can really see what is getting in there.
Posted by Stephen Huey (Guest)
on 2011-05-28 02:33
(Received via mailing list)
David, that's exactly what I did to solve the problem!  I renamed the
instance variable and started seeing my string inserted into the
email.  Using @body was definitely an issue for some reason.

Thanks,
Stephen
Posted by David Kahn (dkahn)
on 2011-05-28 02:38
(Received via mailing list)
On Fri, May 27, 2011 at 7:32 PM, Stephen Huey <stephenhuey@gmail.com> 
wrote:

> David, that's exactly what I did to solve the problem!  I renamed the
> instance variable and started seeing my string inserted into the
> email.  Using @body was definitely an issue for some reason.
>
> Great... I vaguely recall that I had the same issue, hence the name. I
think I decided that @body must be reserved or used by rails somewhere.
Anyhow, glad it helped!
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.