2015-08-31 3 views
1

У меня есть форма, где внутренний пользователь может запросить отправку информационных материалов клиенту. Когда форма отправляется, она отправляет электронное письмо лицу, ответственному за физическую рассылку материалов клиенту.ActionMailer-access Mail :: Содержимое сообщения или инициализация вручную в контроллере?

Теперь я хочу зафиксировать содержимое сообщения электронной почты, чтобы добавить примечание на страницу показа клиента, и я не уверен, как это сделать.

Один из вариантов я смотрел на это, чтобы использовать after_filter в MaterialsRequestMailer, но называть message.body возвращают большую строку с путем больше текста, чем мне нужно, и я хочу, чтобы избежать добавлений кучи разборе логики, чтобы получить содержание сообщения ,

В принципе, я хочу, что генерируется шаблоном views/materials_request_mailer/send_request_notification.text.erb. Я просмотрел http://www.rubydoc.info/github/mikel/mail/Mail/Message и не могу найти метод для возврата только отображаемого содержимого шаблона. Есть ли способ сделать это?

Если нет, можно ли вручную инициализировать View в контроллере, где у меня уже есть переменные экземпляра, которые я передаю почтовому отправителю? Это не идеальное решение, потому что я использую DelayedJob, и код для добавления заметки будет запущен до отправки фактического сообщения электронной почты. Кроме того, из-за DelayedJob кажется, что я не могу напрямую получить доступ к почтовому объекту из контроллера (если я делаю mail = MaterialsRequestMailer.delay.send_request_notification(...), он присваивает экземпляр Delayed::Backend::ActiveRecord::Job до mail).

ответ

1

Нашли решение, которое работает - message.text_part.body.raw_source - это то, что я искал. (кредит на этот ответ: https://stackoverflow.com/a/15257098/2599738)

class MaterialsRequestMailer < ActionMailer::Base 
    include AbstractController::Callbacks 

    after_filter :add_note_to_client 

    def send_request_notification(client, ...) 
    @client = client 
    ... 
    end 

    def add_note_to_client 
    mail_text = message.text_part.body.raw_source 
    @client.add_account_note(mail_text) 
    end 
end