Rails HTMLメールを作成しようとしていますが、メールの構造(ヘッダーとフッター)がそれぞれに重複しています。通常は問題ありませんが、インラインスタイルでも、色を変更したい場合に問題になる可能性があります。これらの要素を各ファイルから1つにまとめるにはどうすればよいですか?
また、html.erbファイルとtext.erbファイルの間のテキストの重複を排除する方法はありますか。
Rails HTMLメールを作成しようとしていますが、メールの構造(ヘッダーとフッター)がそれぞれに重複しています。通常は問題ありませんが、インラインスタイルでも、色を変更したい場合に問題になる可能性があります。これらの要素を各ファイルから1つにまとめるにはどうすればよいですか?
また、html.erbファイルとtext.erbファイルの間のテキストの重複を排除する方法はありますか。
これを行う簡単な方法は、いくつかのパーシャルを参照することです。次のような名前が付けられているとしましょう。
次に、各メール内でそれらを参照できます。
<%= render :partial => 'email_header' %>
Blah, email-specific content here...
<%= render :partial => 'email_footer' %>
それは機能しますが、完全な構造がインライン化された元のバージョンよりも少ないとはいえ、コピーアンドペーストの束につながります. これを管理するよりクリーンな方法は、これらの電子メールのカスタム レイアウトを設定することです。
「レイアウトとレンダリング」Rails ガイドと「Action Mailer」Rails ガイドのレイアウト セクションは、これまでにこれを行ったことがない場合に役立ちます。
これらの参照から、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」に保たれます。