Verwenden Sie Rails 5.2 ActiveStorage, um PDF zu erstellen und zu speichern und später an E-Mail anzuhängen

10

Ich fürchte, ich bekomme etwas völlig falsches mit der neuen aktiven Speicherfunktion. Ich möchte ein PDF erstellen (ich verwende WickedPdf) und an ein Modell anhängen. Hier ist das erste Problem. Die einzige Chance, die ich bisher herausgefunden habe, ist, zuerst in eine Datei zu schreiben und dann diese Datei zu öffnen, um den Anhang zu erstellen.

%Vor%

Gibt es eine Möglichkeit, den Anhang aus einer Zeichenfolge zu erstellen?

Danach versuche ich diese Datei an eine Mail anzuhängen. Dies schlägt fehl, weil es erneut eine Datei benötigt, kein Blob.

%Vor%

Das Erstellen einer Datei scheint mir wirklich seltsam zu sein.

Kann bitte jemand aufklären, was der richtige Weg ist, um das zu erreichen, ohne überhaupt Dateien zu schreiben? Ich bin unnötig, ineffizient und zeitaufwendig für mich.

=====

Lösung Teil 2: So konnte ich das Dokument anhängen, ohne eine Datei zu erstellen

%Vor%

Teil eins fehlt noch. Hoffe, jemand hat eine Antwort!

    
Markus Andreas 15.01.2018, 18:24
quelle

1 Antwort

2

Ich glaube, wenn Sie etwas wie eine PDF-Datei erstellen, sollten Sie die Option io beim Anhängen verwenden. So mache ich jetzt Dinge in einer Anwendung.

Zum Beispiel hier ist, was die Dokumentation zeigt :

%Vor%

Wie in der Dokumentation angezeigt, sollten Sie die Option ActionDispatch::Http::UploadedFile verwenden, es sei denn, Sie haben io .

Wie zum Anhängen der Datei an eine E-Mail, haben Sie möglicherweise ein paar Optionen. Wenn Sie weiterhin Zugriff auf pdf_document haben, können Sie dies tun. Ich bin mir nicht sicher, welche Art von Objekt es ist.

%Vor%

Aktualisieren

Ich habe vorher body_pdf benutzt, aber nicht für eine Weile. Es sieht so aus, als würden die meisten Generierungsmethoden eine Zeichenfolge zurückgeben, wenn Sie nicht stattdessen eine Datei anfordern. Vielleicht kennst du das bereits - gib einfach einen Hintergrund für die Antwort.

Da wicked_pdf eine Zeichenfolge zurückgeben kann, denke ich, dass Sie StringIO verwenden können, um die Datei anzuhängen. Zum Beispiel:

%Vor%

StringIO funktioniert genau so, wie der Name schon sagt. Es nimmt eine Zeichenfolge und verhält sich wie ein IO. Sobald Sie ein IO haben, können Sie es mit ActiveStorage verwenden, als hätten Sie eine geöffnete Datei.

Dann können Sie, wie Sie in Ihrer aktualisierten Frage erwähnt haben, die Datei herunterladen und an die E-Mail anhängen.

    
Derek Hopper 15.01.2018 23:49
quelle