0

Ich habe derzeit eine Rails App (4.2.1), die die Funktionen bred_pdf und carrierwave verwendet. Der Benutzer klickt derzeit auf eine Schaltfläche, die eine Familienbewertungsansicht in PDF umwandelt. Anschließend lädt der Benutzer die PDF-Datei auf ihren Computer herunter und navigiert zu einem Bewertungsformular, wo sie die PDF-Datei einreicht und erfolgreich an AWS hochlädt.Erstelle PDF mit wicked_pdf und übergebe an carrierwave zum Hochladen

Das alles funktioniert gut, aber was ich tun möchte, ist diesen Prozess "zu vereinfachen". Wenn der Benutzer auf eine Schaltfläche klickt, wird die PDF-Datei erstellt und an carrierwave übergeben, um sie mithilfe von carrierwave/fog in AWS hochzuladen. Ich habe jetzt eine Ansicht mit einem Link zu einem Controller, der die FamilyAssesment.upload_assessment-Methode aufruft.

Ich habe mit verschiedenen Ansätzen experimentiert, aber ich kann nicht genau verstehen, was ich tun muss, um das zu erreichen.

Knopf auf Blick

<%= link_to "Upload", family_assessment_pdf_upload_url(id: "#{f.object.case.id}"), class: 'button radius default tiny pdf-button' %> 

family_assessments_controller.rb

class FamilyAssessmentsController < ApplicationController 

    def family_assessment_pdf_upload 
    c = Case.find(params[:id]) 
    family_assessment = c.family_assessment 
    assessment = c.assessments.where(title: 'Families First Assessment').first 

    FamilyAssessment.upload_assessment(assessment, family_assessment) 

    #If work is done and url saved to assessment.assessment do some redirect action here 

    end 

end 

family_assessment.rb

class FamilyAssessment < ActiveRecord::Base 

    def self.upload_assessment(assessment, family_assessment) 
    family_assessment = family_assessment 
    assessment = assessment 

    #I think this is how I would create the PDF in preparation for hand off to carrierwave 

    pdf = WickedPdf.new.pdf_from_string(
     render_to_string(:pdf => "family_assessment",:template => 'family_assessments/family_assessment.pdf.erb', :locals => {:family_assessment => family_assessment}) 
    ) 

    #Pass pdf to carrierwave and save url in assessment.assessment 

    end 

end 

Antwort

1

Es sieht aus wie Sie das PDF in eine temporäre Datei speichern kann dann diese Temp laden Datei.

class FamilyAssessment < ActiveRecord::Base 

    def self.upload_assessment(assessment, family_assessment) 
    family_assessment = family_assessment 
    assessment = assessment 

    #I think this is how I would create the PDF in preparation for hand off to carrierwave 

    pdf = WickedPdf.new.pdf_from_string(
     render_to_string(:pdf => "family_assessment",:template => 'family_assessments/family_assessment.pdf.erb', :locals => {:family_assessment => family_assessment}) 
    ) 

    #Pass pdf to carrierwave and save url in assessment.assessment 
    # Write it to tempfile 
    tempfile = Tempfile.new("#{Rails.root}/tmp/assessment_#{self.id}.pdf") 
    tempfile.binmode 
    tempfile.write pdf_file 
    tempfile.close 

    # Attach that tempfile to the invoice 
    unless pdf_file.blank? 
     self.uploads.clear 
     self.uploads.create(fileinfo: File.open(tempfile.path), job_id: self.job.id) 
     tempfile.unlink 
    end 

    end 

end 

Eine Menge dieser Antwort kommt von Getting PDF from WickedPDF for attachment via Carrierwave

+0

ich so etwas wie 'keine solche Datei oder das Verzeichnis erhalten @ rb_sysopen - /var/folders/_0/f6fqddzx6sx64kkpf0l540sr0000gn/T/{Rails.root}/tmp/ invoice_78.pdf20170502-46739-59eta1'. Würdest du wissen, wie du das lösen kannst? –

+0

@ Code-MonKy - er hat ein paar Tippfehler. Diese Zeile sollte '" # {Rails.root}/tmp/... "' sein. Beachten Sie die fehlende '#' – toobulkeh

+0

Ich habe den oben genannten Tippfehler behoben. – nzajt

Verwandte Themen