PDF креветки с Rails почтой? - PullRequest
4 голосов
/ 29 апреля 2010

Я успешно создал электронное письмо, которое отправляет при создании Kase, но теперь мне нужно прикрепить PDF, который создается на лету Prawn и Prawno. В основном, когда вы посещаете kase, такой как application.com/kase/1, вы просто добавляете URL с помощью .pdf, т.е. application.com/kase/1.

.

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

Кому-нибудь удавалось заставить это работать?

Спасибо

Danny

Ответы [ 4 ]

3 голосов
/ 02 мая 2010

Вы действительно должны подумать о том, чтобы просто не использовать Prawnto и создать подкласс Prawn :: Document, чтобы делать то, что вам нужно. Тогда и в вашем контроллере, и в коде почтовой программы оно должно быть просто:

MyReport.new.render

См. Документацию по креветкам на этом:

http://wiki.github.com/sandal/prawn/using-prawn-in-rails

3 голосов
/ 29 апреля 2010

Полагаю, было бы лучше, если бы вы хранили где-нибудь сгенерированный pdf - для целей кэширования и т. Д. Но в текущей конфигурации вы можете прочитать сгенерированную страницу с помощью Net::HTTP и прикрепить ответ:

require 'net/http'

def your_mailer_method(record)
  #...
  attachment "application/pdf" do |a|
    a.body = Net::HTTP.get('yourdomain.com', "/kase/#{record.id}.pdf")
    a.filename="your_pdf_name.pdf"
  end  
end
0 голосов
/ 04 марта 2014

Этот код работает для меня

def send_file(file, subject, text, to_email)
      @subject = subject
      @text = text
      attachments["#{invoice.invoice_number}.pdf"] = file
      from_email = abc@xyz.com      
mail(:to => to_email, :from => from_email, :subject=> subject)
  end
0 голосов
/ 22 апреля 2012

Для более новых вам не нужно отправлять запрос еще раз, когда вы можете ::

mail.attachments["invoice.pdf"] = {:mime_type => "application/pdf" , :content => pdf_generator}

Вместо этого ::

send_data pdf.render , :filename => file_name_here , :type => "application/pdf"

просто сделай это ::

pdf.render , :filename => file_name_here , :type => "application/pdf"

Не send_data, просто отобразите этот PDF-файл в приложении к электронному письму, как указано в первом фрагменте.

На самом деле, я только что написал Gist на github.

...