C'est peut-être une question idiote, mais lorsque je rédige un courrier électronique HTML dans Rails, existe-t-il un moyen intégré particulièrement facile de prévisualiser le modèle dans le navigateur ou dois-je écrire une sorte de contrôleur personnalisé qui le récupère à son avis?
Réponses
Trop de publicités?Action Mailer dispose désormais d'un moyen intégré de prévisualisation des e-mails dans Rails 4.1 . Par exemple, regardez ceci:
# located in test/mailers/previews/notifier_mailer_preview.rb
class NotifierPreview < ActionMailer::Preview
# Accessible from http://localhost:3000/rails/mailers/notifier/welcome
def welcome
Notifier.welcome(User.first)
end
end
La réponse précédente est un bon début, mais si vos modèles de courrier contiennent des données dynamiques, il ne fonctionnera pas. E. g. supposons que votre e-mail est une confirmation de commande et, en son sein, vous imprimez @order.total_price
- à l'aide de la méthode précédente de l' @order
variable sera nul.
Voici une petite recette que j'utilise:
Tout d'abord, depuis cet e-mail d'aperçu de la fonctionnalité est certainement pour usage interne seulement, j'ai mis en place quelques génériques de routes dans l'admin de l'espace de noms:
#routes.rb
MySite::Application.routes.draw do
namespace :admin do
match 'mailer(/:action(/:id(.:format)))' => 'mailer#:action'
end
end
Ensuite, j'ai créer le contrôleur. Dans ce contrôleur, j'ai créer une méthode par modèle d'e-mail. Puisque la plupart des e-mails contiennent des données dynamiques, nous avons besoin de remplir quoi que membre des variables du modèle s'attend.
Cela pourrait être fait avec accessoires, mais en général, je préfère simplement de prendre quelques pseudo-aléatoire réelle de données. Rappelez - vous: ce n'est PAS un test unitaire - c'est purement une aide au développement. Il n'est pas nécessaire pour produire le même résultat à chaque fois, en fait, il est probablement mieux si ça ne marche pas!
#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 avons rendu le modèle, nous utilisons layout=>:mailer
. Il incorpore le corps de votre e-mail à l'intérieur de l'e-mail en HTML mise en page que vous avez créé au lieu de l'intérieur de votre application web standard de mise en page (par exemple, application.html.erb
).
Et c'est assez bien. Maintenant, je peux visiter http://mysite.com/admin/mailer/preview_welcome pour un aperçu des changements à mon e-mail de bienvenue modèle.
La configuration la plus simple que j'ai vue est MailCatcher . L'installation a pris 2 minutes et fonctionne pour les nouveaux expéditeurs qui sortent de la boîte.
J'utilise email_preview . Essaie.