O'Reilly logo

Learning Rails by Edd Dumbill, Simon St. Laurent

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Sending HTML Mail

Rails is great at generating HTML, so of course ActionMailer can generate HTML. It works almost like generating text messages, but with a few more details. Because some users really prefer text email messages, this demonstration will give them a choice. The form in app/views/awards/show.html.erb used to request the email, previously shown in Example 17-5, will have an extra checkbox. This extra component sets a parameter identifying whether to send “rich text” (really HTML) email, highlighted in Example 17-6. (This code is in ch17/student011.)

Example 17-6. Adding a checkbox for choosing whether to send HTML or text email

<% form_tag email_student_award_path(@student, @award) do %>
  <p><%= check_box_tag :use_html %>
  <label for="use_html">Use rich text?</label></p>
  <%= submit_tag 'Email me this award' %>
<% end %>

The email method in awards_controller, previously shown in Example 17-2, grows a little more complex to support the checkbox’s new :use_html parameter, as shown in Example 17-7.

Example 17-7. Providing controller support for sending HTML-based email, when desired

def email
    @award = @student.awards.find(params[:id])
    if params[:use_html]
      AwardMailer.deliver_html_certificate(@award, current_user.email)
    else
      AwardMailer.deliver_certificate(@award, current_user.email)
    end
    flash[:notice] = "Email has been sent"
    redirect_to([@student, @award])
  end

If the checkbox was checked, the user wants rich text, and so the controller calls AwardMailer’s deliver_html_certificate ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required