2

Rails HTMLメールを作成しようとしていますが、メールの構造(ヘッダーとフッター)がそれぞれに重複しています。通常は問題ありませんが、インラインスタイルでも、色を変更したい場合に問題になる可能性があります。これらの要素を各ファイルから1つにまとめるにはどうすればよいですか?

また、html.erbファイルとtext.erbファイルの間のテキストの重複を排除する方法はありますか。

4

1 に答える 1

8

これを行う簡単な方法は、いくつかのパーシャルを参照することです。次のような名前が付けられているとしましょう。

  • _email_header.html.erb
  • _email_footer.html.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」に保たれます。

于 2012-10-03T02:03:41.623 に答える