我正在嘗試構建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