La réponse de Daniel est un bon début, mais si vos modèles de courrier électronique contiennent des données dynamiques, cela ne fonctionnera pas. Par exemple, supposons que votre e-mail soit un reçu de commande et que vous y imprimiez @order.total_price
- en utilisant la méthode précédente, la @order
variable sera nulle.
Voici une petite recette que j'utilise:
Tout d'abord, puisque cette fonctionnalité de prévisualisation des e-mails est définitivement à usage interne uniquement, j'ai configuré des routes génériques dans l'espace de noms admin:
#routes.rb
MySite::Application.routes.draw do
namespace :admin do
match 'mailer(/:action(/:id(.:format)))' => 'mailer#:action'
end
end
Ensuite, je crée le contrôleur. Dans ce contrôleur, je crée une méthode par modèle d'e-mail. Étant donné que la plupart des e-mails contiennent des données dynamiques, nous devons renseigner les variables membres attendues par le modèle.
Cela pourrait être fait avec des appareils, mais je préfère généralement récupérer des données réelles pseudo-aléatoires. N'oubliez pas - ce n'est PAS un test unitaire - c'est purement une aide au développement. Il n'a pas besoin de produire le même résultat à chaque fois - en fait, c'est probablement mieux si ce n'est pas le cas!
#app/controllers/admin/mailer_controller.rb
class Admin::MailerController < Admin::ApplicationController
def preview_welcome()
@user = User.last
render :file => 'mailer/welcome.html.erb', :layout => 'mailer'
end
end
Notez que lorsque nous rendons le modèle, nous utilisons layout=>:mailer
. Cela intègre le corps de votre e-mail dans la mise en page HTML que vous avez créée au lieu de l'intérieur de la mise en page typique de votre application Web (par exemple application.html.erb
).
Et c'est à peu près tout. Je peux maintenant visiter http://example.com/admin/mailer/preview_welcome pour prévisualiser les modifications apportées à mon modèle d'e-mail de bienvenue.