Rails3 - гем wicked_pdf, проблема нижнего колонтитула при вызове из модели почтовой программы - PullRequest
2 голосов
/ 21 декабря 2011

Я использую wicked_pdf pdf_from_string внутри модели action mailer rails 3. PDF рендер отлично делает это:

attachments ["pdf.pdf"] = WickedPdf.new.pdf_from_string ( render_to_string (: pdf => "pdf.pdf",: template => 'documents / show.pdf.erb') )

Когда я пытаюсь передать параметр: нижний колонтитул, он не работает с этими параметрами:

attachments["pdf.pdf"] = WickedPdf.new.pdf_from_string(
    render_to_string(:pdf => "pdf.pdf", :template => 'pdf/pdf.html.erb', :layout => 'pdfs/pdf', 
    :footer => {:html => {:template => 'pdf/pdf_footer.html.erb', :layout => 'pdfs/pdf'}, :spacing => -65})
  )

Обратите внимание, что: опция footer работает внутри контроллера, исходя из значения по умолчанию контроллера 'render': pdf method.

Я закончил тем, что делал что-то вроде этого, но я бы предпочел не использовать getchas.

File.open("/tmp/wicked_pdf_#{@model.number}.html", 'w+b', 0644) { |f|
 f.write render_to_string({:template => 'pdf/pdf_footer.html.erb', :layout => 'pdfs/pdf'})
}
attachments["pdf.pdf"] = WickedPdf.new.pdf_from_string(
      render_to_string(:pdf => "pdf.pdf", :template => 'pdf/pdf.html.erb', :layout => 'pdfs/pdf'),
      :footer => {:html => {:url => "file:///tmp/wicked_pdf_#{@model.number}.html"}, :spacing => -65}                 
    )

Есть какие-нибудь подсказки, чтобы это работало правильно?

1 Ответ

0 голосов
/ 21 декабря 2011

Похоже, что это связано с проблемой в этом вопросе:

Rails 3 ActionMailer и Wicked_PDF

Там, где почтовой программе не нравится, когда вы вызываете render.

Попробуйте обернуть настройку вложения в блоке response_to следующим образом:

mail(:subject => 'Your pdf', :to => user.email) do |format|
  format.text
  format.pdf do
    attachments['pdf.pdf'] = WickedPdf.new.pdf_from_string(
      render_to_string(
        :pdf      => "pdf.pdf",
        :template => 'pdf/pdf.html.erb',
        :layout   => 'pdfs/pdf', 
        :footer   => {
          :html => {
            :template => 'pdf/pdf_footer.html.erb',
            :layout   => 'pdfs/pdf'
          },
          :spacing => -65
        }                 
      )
  end
end
...