2

私のソフトウェアは、ユーザーに電子メールを送信します。メールが送信される前に、メールがどのように表示されるかを示したいと思います。ただし、ActionMailer の規則では、テンプレート全体が 1 つのファイルに含まれています。これは、html、head、body タグなどを意味します。送信する電子メールがどのように表示されるかをユーザーにプレビューする良い方法を誰か思いつきますか?

ありがとう!

4

1 に答える 1

1

同じ問題がありました。メーラーではなく、送信した関連モデルを使用してディスプレイを作成しました。サンプル データまたはライブ データをフィードして、ユーザーに表示することができました。実際に送信するときが来たとき、メーラービュー内でまったく同じものをレンダリングしました

EDIT:事前にがらくた変数名をお詫び申し上げます。それらについて明示的に話すことが許されているかどうかはわかりません:)

foo(status,bar) という名前の BarMailer 関数があり、status がテスト メールまたはライブ メールで、bar が関連付けられたモデルであるとします。

delivery_foo("test",bar) を呼び出しました

delivery_foo はマルチパート メッセージを送信するので、各パートに対して render_message を実行し、必要な変数を渡します。例えば:

p.body = render_message('bar_html', :bar => bar, :other_data => bar.other_data)

そのため、render_message は特に bar_html ビューを使用するように言っています (プレーン テキスト用の bar_text もあります)。

これは私の bar_html ビューの内容です:

<%=render :inline => @bar.some_parent.some_other_model.html, :locals => {:other_data => @other_data, :time => Time.now, :bar => @bar }%>

少し複雑ですが、テンプレート システムに基づいています。どこでもインラインでレンダリングすることにより、プレビューや送信など、さまざまな機能に同じコードを使用できます。これはWYSIWIGになるので気に入っています。電子メールの潜在的な出力にバグがあり、混乱する可能性のある余分なコードや機能はありません。ある領域で機能する場合は、他の領域でも機能します。さらに、それを DRY に保つということは、コピーを変更することを忘れないということです (頻繁に行いますね)。

于 2009-11-09T22:20:21.070 に答える