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 = "webmaster@example.com"
@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.
on 25.10.2008 19:31
on 25.10.2008 19:35
On Oct 25, 6:30 pm, X <c...@unagon.com> 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
on 25.10.2008 20:11
> 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.
on 25.10.2008 20:59
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.
on 25.10.2008 21:02
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?
on 25.10.2008 21:28
> 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.
on 25.10.2008 21:33
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
on 25.10.2008 21:39
Of course! :-) Thanx for the real quick support !!