La risposta di Daniel è un buon inizio, ma se i tuoi modelli di email contengono dati dinamici, non funzionerà. Ad esempio, supponi che la tua email sia una ricevuta dell'ordine e al suo interno stampi, @order.total_price
utilizzando il metodo precedente, il file@order
variabile sarà nulla.
Ecco una piccola ricetta che uso:
Innanzitutto, poiché questa funzionalità di anteprima della posta elettronica è sicuramente solo per uso interno, ho impostato alcune route generiche nello spazio dei nomi dell'amministratore:
#routes.rb
MySite::Application.routes.draw do
namespace :admin do
match 'mailer(/:action(/:id(.:format)))' => 'mailer#:action'
end
end
Successivamente, creo il controller. In questo controller, creo un metodo per modello di email. Poiché la maggior parte delle e-mail contiene dati dinamici, è necessario popolare tutte le variabili membro previste dal modello.
Questo potrebbe essere fatto con i dispositivi, ma in genere preferisco prendere solo alcuni dati reali pseudo-casuali. Ricorda: questo NON è un test unitario, è puramente un aiuto allo sviluppo. Non è necessario che produca lo stesso risultato ogni volta, anzi, probabilmente è meglio se non lo fa!
#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
Nota che quando rendiamo il template, usiamo layout=>:mailer
. Questo incorpora il corpo della tua email all'interno del layout email HTML che hai creato invece che all'interno del layout tipico dell'applicazione web (ad esempio application.html.erb
).
E questo è praticamente tutto. Ora posso visitare http://example.com/admin/mailer/preview_welcome per visualizzare in anteprima la modifica al mio modello di email di benvenuto.