我正在尝试构建rails HTML电子邮件,但每封电子邮件的结构(页眉和页脚)都是重复的。通常它不是问题,但是对于内联样式,如果我想改变颜色,它似乎也是一个问题。如何从每个文件中将这些元素拉出来?
另外,无论如何都要消除html.erb和text.erb文件之间的文本重复。
答案 0 :(得分:8)
一种简单的方法是引用几个部分。让我们说它们的名字是这样的:
然后您可以在每封电子邮件中引用它们:
<%= 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”。