2009-11-09 7 views
2

Mon logiciel envoie des courriels aux utilisateurs. Je veux leur montrer à quoi ressembleront les courriels avant qu'ils ne soient envoyés. Cependant, avec les conventions ActionMailer, le modèle entier est dans un fichier. Cela signifie le html, la tête, les balises de corps, etc. Quelqu'un peut-il penser à un bon moyen de donner à mes utilisateurs un aperçu de ce que les e-mails que j'envoie ressemblera?Quelle est la meilleure façon de montrer à mes utilisateurs un aperçu des modèles d'email dans Ruby on Rails?

Merci!

Répondre

1

J'ai eu le même problème. J'ai construit l'affichage avec le modèle associé que j'envoyais plutôt que dans l'expéditeur. J'ai été capable de nourrir des données d'échantillon ou des données en direct pour l'afficher à l'utilisateur. quand il est venu le temps de l'envoyer réellement, j'ai rendu exactement la même chose dans la vue mailer

EDIT: Je m'excuse à l'avance pour les noms de variables de la merde. Disons que j'ai une fonction BarMailer appelée foo (status, bar) où l'état est un e-mail de test ou un e-mail en direct et une barre est mon modèle associé.

J'ai appelé deliver_foo ("test", bar)

deliver_foo envoie un message multipart donc pour chaque partie que je render_message et transmettre les variables dont j'ai besoin. par exemple:

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

donc, que render_message est dit d'utiliser spécifiquement la vue bar_html (j'ai aussi un bar_text pour le texte brut).

c'est le contenu de mon avis de bar_html:

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

Son un peu compliqué, mais il est basé sur un système de modèle. En rendant le rendu en ligne partout, je peux utiliser le même code pour un certain nombre de fonctions différentes, y compris la prévisualisation et l'envoi. J'aime ça parce que ça devient un WYSIWIG. Pas de code supplémentaire ou de fonctionnalité qui pourrait être bogué et muck avec la sortie potentielle dans un e-mail. Si cela fonctionne dans un domaine, cela fonctionnera dans l'autre. Plus le garder au sec signifie que je ne vais pas oublier de modifier une copie (ce que je ferais fréquemment, hehe).

+0

intéressant ... donc dans votre modèle actionmailer, vous aviez quelque chose comme @body [: everything] = AssociatedModel.generate_email, et votre vue actionmailer était juste @everything? – Tony

+0

édité la réponse originale pour vous afin que je puisse utiliser la fonction de code :) – cgr

Questions connexes