Come rendere il pdf di gamberi come allegato in ActionMailer? Uso delayed_job e non capisco, come potrei renderizzare il file pdf nel mailer di azione (non nel controller). Quale formato dovrei usare?Rails 3 Render Prawn pdf in ActionMailer
7
A
risposta
7
Devi solo dire a Prawn di eseguire il rendering del PDF in una stringa, quindi aggiungerlo come allegato al messaggio di posta elettronica. Consulta lo ActionMailer docs per i dettagli sugli allegati.
Ecco un esempio:
class ReportPdf
def initialize(report)
@report = report
end
def render
doc = Prawn::Document.new
# Draw some stuff...
doc.draw_text @report.title, :at => [100, 100], :size => 32
# Return the PDF, rendered to a string
doc.render
end
end
class MyPdfMailer < ActionMailer::Base
def report(report_id, recipient_email)
report = Report.find(report_id)
report_pdf_view = ReportPdf.new(report)
report_pdf_content = report_pdf_view.render()
attachments['report.pdf'] = {
mime_type: 'application/pdf',
content: report_pdf_content
}
mail(:to => recipient_email, :subject => "Your report is attached")
end
end
0
La mia soluzione:
render_to_string('invoices/show.pdf', :type => :prawn)
PDF è stato danneggiato perché non ho scritto blocco per la funzione di posta elettronica e-mail in più parti non era corretto.
3
Ho seguito i RailsCasts per PRAWN. Preso ciò che è già stato detto e ciò che stavo cercando di ottenere allo stesso modo, ho impostato il nome dell'allegato e poi ho creato il PDF.
InvoiceMailer:
def invoice_email(invoice)
@invoice = invoice
@user = @invoice.user
attachments["#{@invoice.id}.pdf"] = InvoicePdf.new(@invoice, view_context).render
mail(:to => @invoice.user.email,
:subject => "Invoice # #{@invoice.id}")
end
ho già viste/fatture/show.pdf.prawn. InvoicesController lo esegue correttamente. Ho provato a renderlo utilizzando render_to_string nel mailer e ho ottenuto PDF corrotto. Come rendere questo file di visualizzazione esistente? Potrebbe essere necessario specificare: tipo o formato per render_to_string. – maxs