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).
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
édité la réponse originale pour vous afin que je puisse utiliser la fonction de code :) – cgr