Ответ Даниэля - хорошее начало, но если ваши почтовые шаблоны содержат какие-либо динамические данные, это не сработает.Например, предположим, что ваша электронная почта является квитанцией о заказе, и в ней вы распечатываете @order.total_price
- используя предыдущий метод, переменная @order
будет равна нулю.
Вот небольшой рецепт, который я использую:
Во-первых, поскольку эта функция предварительного просмотра электронной почты определенно предназначена только для внутреннего использования, я настроил несколько общих маршрутов в пространстве имен администратора:
#routes.rb
MySite::Application.routes.draw do
namespace :admin do
match 'mailer(/:action(/:id(.:format)))' => 'mailer#:action'
end
end
Далее я создаю контроллер.В этом контроллере я создаю один метод для каждого шаблона электронной почты.Поскольку большинство электронных писем содержат динамические данные, нам нужно заполнить любые переменные-члены, ожидаемые шаблоном.
Это можно сделать с помощью фиксаторов, но я обычно предпочитаю просто получить некоторые псевдослучайные реальные данные.Помните - это НЕ модульное тестирование - это просто помощь в целях развития.Ему не нужно выдавать один и тот же результат каждый раз - на самом деле - вероятно, лучше, если это не так!
#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
Обратите внимание, что когда мы визуализируем шаблон, мы используем layout=>:mailer
.Это встраивает тело вашей электронной почты в созданный вами макет электронной почты в формате HTML, а не в типичный макет веб-приложения (например, application.html.erb
).
И это во многом.Теперь я могу посетить http://example.com/admin/mailer/preview_welcome, чтобы просмотреть изменения в своем приветственном шаблоне электронной почты.