Forum: Ruby on Rails Routing of result not clear in ActionMailer

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Clemens C. (Guest)
on 2008-10-25 21:31
(Received via mailing list)
Dear all,

I am trying to understand the following behaviour of the ActionMailer
in Rails 2.

I have an emailer_controller.rb

class EmailerController < ApplicationController
  def send_mail
      Emailer::deliver_contact_email(params[:email])
  end
end

I have a model emailer.rb

class Emailer < ActionMailer::Base
    def contact_email(email_params, sent_at = Time.now)
        @recipients = "removed_email_address@domain.invalid"
        @from = email_params[:name] + " <" + email_params[:address] +
">"
        @subject = email_params[:subject]
        @sent_on = sent_at
        @body["email_body"] = email_params[:body]
        @body["email_name"] = email_params[:name]
    end
end

and I send from within a form

<%= form_tag :action=> "send_mail", :controller=> "emailer" %>
  ... some details deleted here ...
    <input type="submit" value="Send" class="primary" />
  <%=  %>

and I have a send_mail.html.erb template with some content (thanx for
your mail...)

In this setup I get an error:  Missing template emailer/
contact_email.html.erb

When I add an empty template of that name, everything works nicely.

My question is: WHY do I need a template with the same name as a
method in the model? So far as I understand Ruby, I am expected to
have a template for the controller method - but why for the model.

And: If I put some content into that file it is not displayed.

So: What happens with the content in emailer/contact_email.html.erb ?

Thanx for helping out.
Frederick C. (Guest)
on 2008-10-25 21:35
(Received via mailing list)
On Oct 25, 6:30 pm, X <removed_email_address@domain.invalid> wrote:

> In this setup I get an error:  Missing template emailer/
> contact_email.html.erb
>
> When I add an empty template of that name, everything works nicely.
>
> My question is: WHY do I need a template with the same name as a
> method in the model? So far as I understand Ruby, I am expected to
> have a template for the controller method - but why for the model.

Where do you thing the content for the email is coming from? Just as
actions in a controller are backed by template files so are methods in
an ActionMailer object.
>
> And: If I put some content into that file it is not displayed.
>
> So: What happens with the content in emailer/contact_email.html.erb ?
>
It should form the body of the email sent.

Fred
Clemens C. (Guest)
on 2008-10-25 22:11
(Received via mailing list)
> It should form the body of the email sent.

Ah, okay. Great concept and actually I now realize all testmails were
empty...

But this just leads to the next problem: Shouldn't I have access to
the variables set in the model? Sorry probably I am doing something
very stupid...

With both templates set to

We mail:
Recipients: <%= @recipients %>
From: <%= @from %>
Subject: <%= @subject %>
Sent on: <%= @sent_on %>

I just get the text and NO access to the model neither in the one nor
in the other file.
Clemens C. (Guest)
on 2008-10-25 22:59
(Received via mailing list)
Ok, solved the first subpart.

In contact_email.html.erb I do not have access to all variables of the
mode but only to
the contents of the hash @body. So this is working:

Body: <%= @email_body %>
Name: <%= @email_name %>

Still I am not sure how to solve this for send_mail.html.erb, but
probably a render function is missing here or not correct.
Frederick C. (Guest)
on 2008-10-25 23:02
(Received via mailing list)
On 25 Oct 2008, at 19:58, X wrote:

>
> Ok, solved the first subpart.
>
> In contact_email.html.erb I do not have access to all variables of the
> mode but only to
> the contents of the hash @body. So this is working:
>
Yup you got it.
> Body: <%= @email_body %>
> Name: <%= @email_name %>
>
> Still I am not sure how to solve this for send_mail.html.erb, but
> probably a render function is missing here or not correct.
What was the problem here?
Clemens C. (Guest)
on 2008-10-25 23:28
(Received via mailing list)
> Yup you got it.

Thanx for your quick reply ! Great service :-)

> > Still I am not sure how to solve this for send_mail.html.erb, but
> > probably a render function is missing here or not correct.
>
> What was the problem here?

The same problem (but it seems to have a different answer).

In contact_email.html.erb I did not get access to variable @recipients
but only to variable @email_body, looks like this is rendered off the
hash table @body. But in send_mail.html.erb neither the one nor the
other works. I would, however, want to present the user with a copy of
the mail he sent via the form in the browser, so I need to know how
the send_mail.html.erb template can access the email body.
Frederick C. (Guest)
on 2008-10-25 23:33
(Received via mailing list)
On 25 Oct 2008, at 20:19, X wrote:

> The same problem (but it seems to have a different answer).
>
> In contact_email.html.erb I did not get access to variable @recipients
> but only to variable @email_body, looks like this is rendered off the
> hash table @body. But in send_mail.html.erb neither the one nor the
> other works. I would, however, want to present the user with a copy of
> the mail he sent via the form in the browser, so I need to know how
> the send_mail.html.erb template can access the email body.
>
the send_mail template knows absolutely nothing of what happened in
the mailer. By the time send_mail.html.erb is rendered the
actionmailer object with those instance variables probably doesn't
even exist anymore.
Given that those values were just things pulled out of the params hash
the send_mail view/its associated controller action can just do the
same thing.

Fred
Clemens C. (Guest)
on 2008-10-25 23:39
(Received via mailing list)
Of course! :-)

Thanx for the real quick support !!
This topic is locked and can not be replied to.