11

Rails アプリケーションで、請求書を電子メールに添付しようとしています。

def invoice(invoice)
  attachment :content_disposition => "attachment",
             :body => InvoicePdf.new(invoice),
             :content_type => "application/pdf",
             :filename => 'invoice.pdf'

  mail(:to => @user.email, :subject => "Your Invoice")
end

InvoicePdfは Prawn PDF ドキュメントです

class InvoicePdf < Prawn::Document
  def initialize(order, view)
    draw_pdf
  end

  def draw_pdf
    # pdf stuff
  end
end

メールに添付ファイルがありません。私は何を間違っていますか?どんなヒントでも大歓迎です。

編集:私が使用しているRailsのバージョンは3.0.xです

4

2 に答える 2

15

Action Mailer Guideを見てください。添付ファイルを追加するには、attachments メソッドを呼び出す必要があります。

これを試して:

attachments['attachment_filename'] = InvoicePdf.new(invoice)

これは、InvoicePdf.new(invoice) を呼び出すとファイルが生成され、そのファイルを表す IO オブジェクトが返されることを前提としています。また、InvoicePdf クラスの初期化子が 2 つのパラメーターを想定しているのに、1 つしか渡していないことにも気付きました。

更新: また、Action Mailer はファイル名を取得して MIME タイプを計算し、Content-Type、Content-Disposition、Content-Transfer-Encoding を設定し、添付ファイルの内容をすべて base64 エンコードするので、手動で設定する必要はありません。デフォルトを上書きしたい場合を除き、必要ありません。

あなたのpdf生成方法に基づいて、これはおそらくより良いでしょう:

invoice = InvoicePdf.new(invoice)
attachments["invoice.pdf"] = { :mime_type => 'application/pdf', :content => invoice.render }
mail(:to => @user.email, :subject => "Your Invoice")
于 2012-09-06T07:27:51.383 に答える
0

これだけじゃないの

attachments["invoice.pdf"] = InvoicePdf.new(invoice)

3.0から?

于 2012-09-06T07:29:25.003 に答える