2016-09-23 4 views
0

私は自分のアプリケーションでPDFを生成するために、エビの宝石を使用しています...Prawnで生成されたPDFをパブリックフォルダに保存するにはどうすればよいですか?

アプリ/コントローラ/ orders.rb

class OrdersController < ApplicationController 
    ... 
    def show 
    respond_to do |format| 
     format.html 
     format.pdf do 
     require "prawn/measurement_extensions" 
     ... 
     #render pdf document 
     send_data pdf.render, 
      filename: "order_#{@order.id}.pdf", 
      type: 'application/pdf', 
      disposition: 'inline' 
     end 
    end 
    end 
    ... 
end 

、それが表示するための細かい作業ですが、私の質問があります..

  • orderの作成後、パブリックフォルダ(毎日のフォルダ)にこれらの生成されたpdfsを自動的に保存するにはどうすればよいですか?私はPrawn Documentationの検索を試みましたが、何も見つかりませんでした。
  • 注文をPDFフォーマットのみで表示するには?私はformat.html行をコメントしようとしたが、それは
+0

特定のサーバー上のパブリックフォルダに物を格納することは、a)複数のサーバーを実行したい場合や、b)herokuを実行する場合に実行したいことではありません。 S3のようなファイルストレージシステムを使用して、すべてのサーバーがファイルにアクセスでき、ファイルが再起動しても維持されるようにしたいとします。気にしない場合は、ruby Fileメソッドを使ってpdf.render(内容)をディスクに書き出してください。サーバーの変更を永続化することに関心がある場合は、https://github.com/thoughtbot/paperclipでファイルを保持し、アプリケーションのモデルと関連付けることができます。 –

+0

@JohnNaegle今行っていることは、保存することです後で見ることができるように、注文作成後のPDF請求書。それを達成する最善の方法は何かアドバイスできますか? –

答えて

0

あなたがpdf.renderを呼び出し、send_dataで、それをクライアントに送信すると、あなたが実際にワイヤ上でPDFの内容をダンプしているが動作しませんでした。その代わりに、の結果をFile.newのファイルにダンプし、コントローラ内でsend_fileを使用することができます。ドキュメントのFileを確認してください。あるいは、生成されたpdfをPaperclipのようなものを使用して特定の注文に添付することもできます。

サーバーでファイルとしてpdfを生成する場合は、send_dataの代わりにsend_fileを使用する必要があります。詳しくはguidesをご覧ください。

+0

これを実装する方法についてもっと説明しますか? –

関連する問題