如何防止Rails HTML电子邮件中的样式重复?

时间:2012-10-03 01:17:03

标签: ruby-on-rails-3 actionmailer

我正在尝试构建rails HTML电子邮件,但每封电子邮件的结构(页眉和页脚)都是重复的。通常它不是问题,但是对于内联样式,如果我想改变颜色,它似乎也是一个问题。如何从每个文件中将这些元素拉出来?

另外,无论如何都要消除html.erb和text.erb文件之间的文本重复。

1 个答案:

答案 0 :(得分:8)

一种简单的方法是引用几个部分。让我们说它们的名字是这样的:

  • _email_header.html.erb
  • _email_footer.html.erb

然后您可以在每封电子邮件中引用它们:

<%= render :partial => 'email_header' %>
Blah, email-specific content here...
<%= render :partial => 'email_footer' %>

这样可行,但仍然会导致一堆复制粘贴,虽然比原始版本的内联完整结构要少。更简洁的方法是为这些电子邮件设置自定义布局。

"Layout and Rendering" Rails Guide "Action Mailer" Rails Guide和布局部分是有用的背景资料,如果你之前没有这样做的话。

您将从这些引用中看到有多种方法可以在Action Mailer中调用布局(还有更多方法,在邮件上下文之外),但是为了使用一个示例,您可以在此处创建布局模板文件: app/views/layouts/{your_mailer_name}.html.erb。例如,“user_mailer.html.erb”

其内容可能如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>My Fancy Email</title>
  </head>
  <body>
    <%= render :partial => 'email_header' %>
    <%= yield %>
    <%= render :partial => 'email_footer' %>
  </body>
</html>

请注意yield电话,这是您的特定电子邮件内容将呈现的位置。

此方法可让您的内容保持“DRY”。