20

私はWicked_pdfを使用してビューをPDFとしてレンダリングし、actionmailerを使用して電子メールを送信していますが、それらを連携させることができません。アクションメーラーを使用して特定のビューのPDFバージョンを電子メールに添付し、リンクまたはボタンをクリックして送信したいと思います。メールを送信するlink_toコマンドがあります。これが、電子メールを生成する私のコントローラーです。

def sendemail
 @user = User.find(params[:id])
 Sendpdf.send_report(@user).deliver
 redirect_to user_path(@user)
 flash[:notice] = 'Email has been sent!'
end  

これが私のactionmailerにあるものです:

class Sendpdf < ActionMailer::Base
default :from => "myemail@email.com"

def send_report(user)
@user = user
  attachment "application/pdf" do |a|
  a.body = #Something should go here, maybe WickedPDF.new.something?
  a.filename = 'MyPDF'
end     
mail(:to => user.email, :subject => "awesome pdf, check it")
end

end

私は多くの質問と回答を見てきましたが、そのほとんどがエビに関するものです。これには簡単な答えがあるはずです。誰か助けてもらえますか?

更新以下の回答の代替オプションとして使用する提案に感謝します。ただし、ビューをPDFとしてレンダリングし、それを電子メールに添付する方法を本当に学びたいと思います。必要に応じて、エビなどの別のものを使用することもできます。

4

2 に答える 2

39

これをあなたが望む方法で行う2つの良い方法:

1:コントローラーでPDFを作成し、それをパラメーターとして電子メールに送信します。

# controller
def sendemail
  @user = User.find(params[:id])
  pdf = render_to_string :pdf => 'MyPDF'
  Sendpdf.send_report(@user, pdf).deliver
  redirect_to user_path(@user)
  flash[:notice] = 'Email has been sent!'
end

# mailer
def send_report(user, pdf)
  @user = user
  attachments['MyPDF.pdf'] = pdf
  mail(:to => user.email, :subject => "awesome pdf, check it")
end

2:メーラーで直接PDFを作成します(もう少し複雑ですが、モデルから呼び出すことができます)

def send_report(user)
  @user = user
  mail(:to => user.email, :subject => "awesome pdf, check it") do |format|
    format.text # renders send_report.text.erb for body of email
    format.pdf do
      attachments['MyPDF.pdf'] = WickedPdf.new.pdf_from_string(
        render_to_string(:pdf => 'MyPDF',:template => 'reports/show.pdf.erb')
      )
    end
  end
end
于 2011-04-28T03:48:53.203 に答える
6

それには2つの方法があります。

  1. どちらか、送信する電子メールにpdfを埋め込み、ユーザーが電子メールからpdfをダウンロードするときに、それぞれのコントローラーの新しいpdfアクションをレンダリングする要求がないようにする必要があります。
    これまでにこれを行ったことがないので、これを効率的に行う方法がわかりません。

  2. または、電子メールでPDFへのリンクを指定するだけで、ユーザーがそれをクリックすると、PDFを作成するためのアクションが呼び出され、ユーザーはそれをダウンロードできます。
    このように、PDFのダウンロードのためにサーバーに多くの負担がある場合は、これらの要求を別の場所にリダイレクトできます。要するに、効率には大きな可能性があります。

2番目のメソッドのサンプルコード(提供されているコードはPDFkitを使用して記述されているため、それに応じて変更してください):

class PdfsController < ApplicationController
  def pdf
    respond_to do |format|
      format.pdf { render :text => wickedPDF.new( Pdf.find(params[:id]).content ).to_pdf }
    end
  end
...
end

wickedPDFに従ってPdf.find(params[:id]).content、選択したとおりに、および方法を置き換えます。to_pdf

次に、このように電子メールでPDFダウンロードのリンクを渡すだけです。

<%= link_to "Download", pdf_pdf_path(pdf, :format => "pdf") %>

またはwickedPDFに従って適切なものは何でも。

于 2011-04-23T10:45:16.460 に答える