2009-11-09 2 views
2

Мое программное обеспечение отправляет электронные письма пользователям. Я хочу показать им, как будут выглядеть электронные письма, прежде чем они будут отправлены. Однако, с соглашениями ActionMailer, весь шаблон находится в одном файле. Это означает теги html, head, body и т. Д. Может ли кто-нибудь подумать о том, чтобы дать моим пользователям предварительный просмотр того, что будут отправлять электронные письма?Каков наилучший способ показать моим пользователям предварительный просмотр шаблонов электронной почты в Ruby on Rails?

Спасибо!

ответ

1

У меня была та же проблема. Я построил дисплей с ассоциированной моделью, которую я отправлял, а не в почтовой программе. Я смог подавать данные образца или живые данные, чтобы отобразить их пользователю. , когда пришло время отправить его, я отобразил то же самое в пределах почтового ящика

EDIT: Я прошу прощения за имена переменных дерьма заранее. Я не уверен, что мне разрешено явно говорить о них :)

Допустим, у меня есть функция BarMailer, называемая foo (status, bar) где статус - это тестовое электронное письмо или прямая электронная почта, а бара - моя ассоциированная модель.

Я назвал deliver_foo ("тест", бар)

deliver_foo посылает сообщение многослойного поэтому для каждой части I render_message и пройти по переменному мне нужно. например:

p.body = render_message('bar_html', :bar => bar, :other_data => bar.other_data) 

так, что render_message это говорит конкретно использовать вид bar_html (У меня также есть bar_text для обычного текста).

это содержание моего зрения bar_html:

<%=render :inline => @bar.some_parent.some_other_model.html, :locals => {:other_data => @other_data, :time => Time.now, :bar => @bar }%> 

Ее немного сложнее, но она основана на системе шаблонов. Благодаря рендерингу inline во всем мире, я могу использовать один и тот же код для множества различных функций, включая предварительный просмотр и отправку. Мне это нравится, потому что он становится WYSIWIG. Никакого дополнительного кода или функциональности, которые могут быть ошибочными и гадости с потенциальным выходом в электронном письме. Если он работает в одной области, он будет работать в другом. Плюс, сохраняя это DRY, я не собираюсь забывать модифицировать копию (что я бы часто делал, хе-хе).

+0

интересный ... так что в вашей модели actionmailer у вас было что-то вроде @body [: everything] = AssociatedModel.generate_email, а затем ваше представление actionmailer было просто @everything? – Tony

+0

отредактировал оригинальный ответ для вас, чтобы я мог использовать функцию кода :) – cgr