为 ActionMailer 渲染不同的视图(模板)

作者:编程家 分类: ruby 时间:2025-09-19

## 使用 ActionMailer 渲染不同视图的方法

在 Ruby on Rails 中,Action Mailer 是一个强大的工具,用于发送电子邮件。有时候,我们希望基于不同的情景或条件发送不同的邮件内容,这就需要根据需求渲染不同的视图(模板)。以下将介绍如何使用 Action Mailer 实现这一目的。

### 创建 Action Mailer 类

首先,在 Rails 应用中创建一个 Action Mailer 类。假设我们有一个名为 `UserMailer` 的类用于发送邮件给用户,我们可以执行以下操作:

ruby

# 在终端中执行以下命令创建一个 UserMailer

rails generate mailer UserMailer

这将在应用的 `app/mailers` 目录下创建一个 `user_mailer.rb` 文件。

### 定义不同的邮件视图

要渲染不同的邮件内容,我们可以在 `UserMailer` 类中定义不同的方法,每个方法对应渲染不同的邮件视图。例如,假设我们有两种不同的邮件内容,一种是欢迎邮件,另一种是通知邮件。

ruby

class UserMailer < ApplicationMailer

def welcome_email(user)

@user = user

mail(to: @user.email, subject: '欢迎加入我们!')

end

def notification_email(user)

@user = user

mail(to: @user.email, subject: '重要通知')

end

end

### 使用不同的邮件视图

为了渲染不同的邮件内容,需要创建对应的视图模板。Rails 默认会寻找 `app/views/user_mailer` 目录下与方法同名的视图文件。

例如,对于 `welcome_email` 方法,可以创建一个 `welcome_email.html.erb` 和 `welcome_email.text.erb` 文件,用于渲染 HTML 和纯文本格式的邮件内容。同样,对于 `notification_email` 方法也可以创建类似的视图文件。

### 在邮件方法中指定视图

在 Action Mailer 方法中,我们可以指定使用哪个视图模板来渲染邮件内容。这可以通过 `mail` 方法中的 `render` 参数来完成。

ruby

class UserMailer < ApplicationMailer

def welcome_email(user)

@user = user

mail(to: @user.email, subject: '欢迎加入我们!') do |format|

format.html { render 'welcome_email' }

format.text { render 'welcome_email' }

end

end

def notification_email(user)

@user = user

mail(to: @user.email, subject: '重要通知') do |format|

format.html { render 'notification_email' }

format.text { render 'notification_email' }

end

end

end

通过以上方式,我们可以根据需要渲染不同的视图,以发送不同内容的电子邮件。这种灵活的方法使得在发送邮件时能根据条件或不同场景呈现不同的信息。

这是使用 Action Mailer 渲染不同视图的简单而强大的方法,允许根据需求动态地生成邮件内容,为用户提供更个性化的体验。