2012-10-03 100 views
2

我正在嘗試構建Rails HTML電子郵件,但每個電子郵件的結構(頁眉和頁腳)都是重複的。通常情況下這不是問題,但是對於內聯樣式,如果我想更改顏色,它似乎可能會成爲問題。我怎樣才能將這些元素從每個文件中分離出來?如何防止Rails HTML電子郵件中的樣式重複?

而且,反正是有消除html.erb和text.erb文件之間文本的複製。

回答

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」。

+0

做部分基本上插入代碼的地方,你有<%= render ....%>? – mergesort

+1

或多或少,是的。更具體地說,「渲染」是一個Rails函數,用於加載該部分並將其呈現在該位置。 「部分」只是另一個模板的一個奇特名稱,它是另一個模板中的一個片段。它們在Rails中通過向文件名預先加下劃線來表示。請參閱http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials – manzoid

+0

也我真的不知道這將如何工作,因爲我使用動作郵件。 .html.erb文件位於views/xxx_mailer中,我在app/mailers文件夾中有.rb文件。我只是沒有真正知道上面的佈局文件的位置,以及如何在使用yield時獲得必要的內容。感謝您的幫助順便說一句。 – mergesort

相關問題