Ответ Даниэля - хорошее начало, но если ваши шаблоны писем содержат какие-либо динамические данные, это не сработает. Например, предположим, что ваша электронная почта - это квитанция о заказе, и вы распечатываете ее @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, чтобы просмотреть изменения в моем шаблоне приветственного письма.