Bird
Raised Fist0
Ruby on Railsframework~20 mins

Mailer generation and templates in Ruby on Rails - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Mailer Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the output of this mailer method?
Given the following Rails mailer method, what will be the subject line of the sent email?
Ruby on Rails
class UserMailer < ApplicationMailer
  def welcome_email(user)
    @user = user
    mail(to: @user.email, subject: "Welcome to Our Site")
  end
end

# Assume user.email = 'test@example.com'

# When UserMailer.welcome_email(user).deliver_now is called
A"Welcome Email"
B"Welcome to Our Site"
C"Hello from Our Site"
D"UserMailer Notification"
Attempts:
2 left
💡 Hint
Look at the subject argument inside the mail method.
📝 Syntax
intermediate
1:30remaining
Which option correctly defines a mailer template file name?
In Rails, which filename correctly matches the mailer method 'notification_email' in 'UserMailer' for an HTML email template?
Aapp/views/user_mailer/notification_email.html
Bapp/views/user_mailer/notification_email.html.haml
Capp/views/user_mailer/notification_email.erb
Dapp/views/user_mailer/notification_email.html.erb
Attempts:
2 left
💡 Hint
Rails expects template files to have the mailer method name and format with extension.
🔧 Debug
advanced
2:30remaining
Why does this mailer raise an error?
Examine this mailer method and identify the cause of the error when sending the email.
Ruby on Rails
class UserMailer < ApplicationMailer
  def alert_email(user)
    @user = user
    mail(to: user.email, subject: "Alert") do |format|
      format.html
      format.text
    end
  end
end

# Error: Missing template user_mailer/alert_email.html.erb
ANo template file named alert_email.html.erb exists in user_mailer views folder
BThe mail method is missing the 'from' parameter
CThe block syntax with format is invalid in mail method
DThe user variable is not defined inside the method
Attempts:
2 left
💡 Hint
Check the error message about missing template.
❓ state_output
advanced
2:00remaining
What is the value of @greeting in this mailer template?
Given this mailer method and template, what will be the rendered value of @greeting in the email?
Ruby on Rails
class UserMailer < ApplicationMailer
  def custom_email(user)
    @greeting = "Hello, #{user.name}!"
    mail(to: user.email, subject: "Custom Greeting")
  end
end

# Template: app/views/user_mailer/custom_email.html.erb
# <p><%= @greeting %></p>

# Assume user.name = 'Alice'
A"Hello, Alice!"
B"Hello, user.name!"
C"Hello, !"
D"Hello, #{user.name}!"
Attempts:
2 left
💡 Hint
Instance variables set in the mailer method are available in the template.
🧠 Conceptual
expert
3:00remaining
Which option best describes how Rails mailers handle multipart emails?
How does Rails decide which email format (HTML or text) to send when a mailer defines both formats in its template?
ARails sends only the text part if both templates exist, ignoring the HTML part
BRails sends only the HTML part if both templates exist, ignoring the text part
CRails sends a multipart email containing both HTML and text parts; the email client chooses which to display
DRails randomly sends either the HTML or text part each time the email is sent
Attempts:
2 left
💡 Hint
Think about how email clients handle different content types.

Practice

(1/5)
1. What is the primary purpose of a mailer in a Rails application?
easy
A. To send emails from the application
B. To handle database migrations
C. To manage user sessions
D. To style HTML templates

Solution

  1. Step 1: Understand the role of mailers

    Mailers in Rails are designed to send emails from the application to users or other recipients.
  2. Step 2: Differentiate from other components

    Database migrations handle schema changes, sessions manage user logins, and styling is done in views or CSS, not mailers.
  3. Final Answer:

    To send emails from the application -> Option A
  4. Quick Check:

    Mailer = send emails [OK]
Hint: Mailers send emails, not handle data or styling [OK]
Common Mistakes:
  • Confusing mailers with controllers
  • Thinking mailers manage database
  • Assuming mailers style HTML
2. Which Rails command correctly generates a mailer named UserMailer?
easy
A. rails generate controller UserMailer
B. rails generate mailer UserMailer
C. rails generate model UserMailer
D. rails generate job UserMailer

Solution

  1. Step 1: Identify the correct generator for mailers

    The command rails generate mailer UserMailer creates a mailer class and related files.
  2. Step 2: Understand other generators

    Controllers handle web requests, models handle data, and jobs handle background tasks, so those commands are incorrect for mailers.
  3. Final Answer:

    rails generate mailer UserMailer -> Option B
  4. Quick Check:

    Mailer generator uses 'mailer' keyword [OK]
Hint: Use 'rails generate mailer' to create mailers [OK]
Common Mistakes:
  • Using controller generator for mailers
  • Confusing model and mailer generators
  • Typing job instead of mailer
3. Given this mailer method:
class UserMailer < ApplicationMailer
  def welcome_email(user)
    @user = user
    mail(to: @user.email, subject: 'Welcome!')
  end
end

What happens when UserMailer.welcome_email(@user).deliver_now is called?
medium
A. The email is queued but not sent immediately
B. The method returns a string with the email content but does not send it
C. An email is sent immediately to the user's email with subject 'Welcome!'
D. An error occurs because deliver_now is not a valid method

Solution

  1. Step 1: Understand mailer method behavior

    The method welcome_email sets instance variables and calls mail to prepare the email.
  2. Step 2: Effect of deliver_now

    Calling deliver_now sends the email immediately instead of queuing it.
  3. Final Answer:

    An email is sent immediately to the user's email with subject 'Welcome!' -> Option C
  4. Quick Check:

    deliver_now sends email immediately [OK]
Hint: deliver_now sends email immediately, deliver_later queues it [OK]
Common Mistakes:
  • Thinking deliver_now only prepares email
  • Confusing deliver_now with deliver_later
  • Assuming deliver_now is invalid
4. Identify the error in this mailer template file named welcome_email.html.erb:
<h1>Welcome, <%= @user.name %>!</h1>
<p>Thanks for joining.</p>
<p>Your email is: <%= user.email %></p>
medium
A. The = sign is missing in the ERB tags
B. The HTML tags are incorrect and will cause rendering errors
C. The template file should be named welcome_email.text.erb
D. The variable user is undefined; should use @user

Solution

  1. Step 1: Check variable usage in template

    The mailer method sets @user, so the template must use @user to access user data.
  2. Step 2: Identify incorrect variable

    The template uses user.email which is undefined, causing an error.
  3. Final Answer:

    The variable user is undefined; should use @user -> Option D
  4. Quick Check:

    Use instance variables (@user) in mailer templates [OK]
Hint: Mailer templates use instance vars like @user, not local vars [OK]
Common Mistakes:
  • Using local variables instead of instance variables
  • Misnaming template files
  • Forgetting <%= in ERB tags
5. You want to send a welcome email with both HTML and plain text versions. Which setup correctly supports this in Rails mailers?
hard
A. Create welcome_email.html.erb and welcome_email.text.erb templates in the mailer views folder
B. Create only welcome_email.html.erb template; Rails auto-generates text version
C. Create welcome_email.erb with mixed HTML and text content
D. Create welcome_email.text.erb only; HTML is optional

Solution

  1. Step 1: Understand multi-format email templates

    Rails supports sending emails with both HTML and plain text by providing separate templates named with .html.erb and .text.erb extensions.
  2. Step 2: Why both templates are needed

    Some email clients prefer plain text, so having both ensures compatibility and better user experience.
  3. Final Answer:

    Create welcome_email.html.erb and welcome_email.text.erb templates in the mailer views folder -> Option A
  4. Quick Check:

    Both .html.erb and .text.erb templates needed for multi-format emails [OK]
Hint: Use both .html.erb and .text.erb templates for emails [OK]
Common Mistakes:
  • Assuming Rails auto-generates text version
  • Mixing HTML and text in one template
  • Skipping plain text template
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard