6

通常はビューをメールの本文として送信したいと思います。

これを行う最も簡単な方法は何ですか?

例: pages/reports.html.erb があり、そのパスにアクセスした場合に表示されるページをメールの本文として送信したいと考えています。

レンダリングされた html を取得してメールの body 変数に割り当てる方法はありますか?

また、添付ファイルとして PDF バージョンを含めたいと思います。(私はwicked_pdfを使用しています)

def reports
  @email = params[:email]
  #something here?
  respond_to do |format|
    format.html
    format.pdf do
      render :pdf => "usage_report"
    end
  end
end

注:DBにはmongoid 2でrails 3.1を使用し、それが役立つ場合はherokuでsendgridを使用しています

編集:私がやったこと:

ここで #something を置き換えますか? と:

email_obj = {}
email_obj.to = params[:email]
email_obj.from = 'reports@company.com'
email_obj.subject = 'Report'
email_obj.body = render_to_string(:template => "pages/reports", :layout => false)
ReportsMailer.deliver_report(email_obj).deliver

そしてメーラークラス mailers/reports_mailer.rb

class ReportsMailer < ActionMailer::Base
    default from: "from@example.com"
    def deliver_report(email)
        @email = email
        mail( :to => @email.to,
        :subject => @email.subject, 
        :from => @email.from)
    end
end

そして、reports_mailer/deliver_report.html.erb で

<%= render :inline => @email.body %>
4

1 に答える 1

3

Rails メーラー ビューは、コントローラー ビューと同様に、ビューのサブ フォルダーにメーラーの名前で格納されます。そのメソッドのビュー/コントローラーがどのように見えるかわからない場合にこれが完全に機能するかどうかを言うのは難しいですが、できることは、そのページのレンダリングを取得し、それを部分的に変換して、両方でレンダリングできるようにすることですコントローラービューとメーラービューなど:

与えられたパーシャル:_my_partial.html.erb

ビュー内:

render "my_partial"

パーシャルを使用すると、ビューをレンダリングするために必要な変数を次のように渡すこともできます。

render "my_partial", :variable => variable

更新: これも興味深いかもしれません: Rendering a Rails view to string for email

于 2012-12-27T06:37:06.967 に答える