wicked_pdf で Rails が送信するメールに PDF を添付する

表題の件ですが、案外はまってしまったので備忘録。

前提

以下の環境で確認

メーラーの準備

元々のコードがこうだったとして

class NotifyMailer < ActionMailer::Base
  def customer(mail_object, document)
    @mail_object = mail_object
    @document = document
    mail from: @mail_object.from,
      to: @mail_object.to,
      subject: @mail_object.title
  end
end

ファイルの添付は次のように行います。

class NotifyMailer < ActionMailer::Base
  def customer(mail_object, document)
    @mail_object = mail_object
    @document = document
    # ここから
    attachments["#{@document.title}.pdf"] = WickedPdf.new.pdf_from_string(
      render_to_string pdf: "#{@document.title}.pdf",
        template: 'documents/show.pdf.erb',
        no_background: false
    )
    # ここまで
    mail from: @mail_object.from,
      to: @mail_object.to,
      subject: @mail_object.title
  end
end

no_background オプションは背景画像を表示したい場合に指定してください。

また、ヘルパーメソッドを使いたい時は

  add_template_helper ApplicationHelper

を追加するのを忘れないようにします。