La respuesta de Daniel es un buen comienzo, pero si sus plantillas de correo electrónico contienen datos dinámicos, no funcionará. Por ejemplo, suponga que su correo electrónico es un recibo de pedido y dentro de él lo imprime @order.total_price
; utilizando el método anterior, la @order
variable será nula.
Aquí hay una pequeña receta que utilizo:
Primero, dado que esta funcionalidad de vista previa de correo electrónico es definitivamente solo para uso interno, configuré algunas rutas genéricas en el espacio de nombres de administrador:
#routes.rb
MySite::Application.routes.draw do
namespace :admin do
match 'mailer(/:action(/:id(.:format)))' => 'mailer#:action'
end
end
A continuación, creo el controlador. En este controlador, creo un método por plantilla de correo electrónico. Dado que la mayoría de los correos electrónicos contienen datos dinámicos, necesitamos completar cualquier variable miembro que espere la plantilla.
Esto se podría hacer con accesorios, pero normalmente prefiero capturar algunos datos reales pseudoaleatorios. Recuerde, esta NO es una prueba unitaria, es puramente una ayuda al desarrollo. No es necesario que produzca el mismo resultado todas las veces; de hecho, ¡probablemente sea mejor si no lo hace!
#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
Tenga en cuenta que cuando renderizamos la plantilla, usamos layout=>:mailer
. Esto incrusta el cuerpo de su correo electrónico dentro del diseño de correo electrónico HTML que ha creado en lugar de dentro de su diseño de aplicación web típico (por ejemplo application.html.erb
).
Y eso es todo. Ahora puedo visitar http://example.com/admin/mailer/preview_welcome para obtener una vista previa del cambio en mi plantilla de correo electrónico de bienvenida.