У меня была та же проблема. Я построил дисплей с ассоциированной моделью, которую я отправлял, а не в почтовой программе. Я смог подавать данные образца или живые данные, чтобы отобразить их пользователю. , когда пришло время отправить его, я отобразил то же самое в пределах почтового ящика
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, я не собираюсь забывать модифицировать копию (что я бы часто делал, хе-хе).
интересный ... так что в вашей модели actionmailer у вас было что-то вроде @body [: everything] = AssociatedModel.generate_email, а затем ваше представление actionmailer было просто @everything? – Tony
отредактировал оригинальный ответ для вас, чтобы я мог использовать функцию кода :) – cgr