我正在尝试构建Rails HTML电子邮件,但每个电子邮件的结构(页眉和页脚)都是重复的。通常情况下这不是问题,但是对于内联样式,如果我想更改颜色,它似乎可能会成为问题。我怎样才能将这些元素从每个文件中分离出来?如何防止Rails HTML电子邮件中的样式重复?
而且,反正是有消除html.erb和text.erb文件之间文本的复制。
我正在尝试构建Rails HTML电子邮件,但每个电子邮件的结构(页眉和页脚)都是重复的。通常情况下这不是问题,但是对于内联样式,如果我想更改颜色,它似乎可能会成为问题。我怎样才能将这些元素从每个文件中分离出来?如何防止Rails HTML电子邮件中的样式重复?
而且,反正是有消除html.erb和text.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”。
做部分基本上插入代码的地方,你有<%= render ....%>? – mergesort
或多或少,是的。更具体地说,“渲染”是一个Rails函数,用于加载该部分并将其呈现在该位置。 “部分”只是另一个模板的一个奇特名称,它是另一个模板中的一个片段。它们在Rails中通过向文件名预先加下划线来表示。请参阅http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials – manzoid
也我真的不知道这将如何工作,因为我使用动作邮件。 .html.erb文件位于views/xxx_mailer中,我在app/mailers文件夹中有.rb文件。我只是没有真正知道上面的布局文件的位置,以及如何在使用yield时获得必要的内容。感谢您的帮助顺便说一句。 – mergesort