在方法中更改邮件程序布局

时间:2015-03-04 15:47:53

标签: ruby-on-rails actionmailer

如何在邮件程序中更改方法中电子邮件的整体布局?

尝试基本上这样做:

class AccountMailer < ActionMailer::Base
  layout 'mailer'

  def reset_password(user)
    layout 'simple_mailer'
  end
end

但这会引发错误。

基本上我在/app/views/layouts/simple_mailer.html.erb中有一个我想要使用的布局,但仅限于那个方法。

我正在运行Rails 4.2。

3 个答案:

答案 0 :(得分:7)

mail方法可以采用传递格式对象的块。

class MyMailer < ApplicationMailer
  layout 'mailer'
  def password_reset(user)
   # uses the "mailer" layout
  end

  def special
    mail(to: "whomever") do |format|
      format.html { render(layout: false) } # no layout is used
      format.text # use the special.text.erb like normal
    end
  end
end

答案 1 :(得分:3)

这个问题的article答案。只需在:layout方法中指定render选项。

答案 2 :(得分:0)

您可以将其他选项传递给邮件块并指定要使用的布局,如下所示:

  class AccountMailer < ActionMailer::Base
    layout 'mailer'

    def reset_password(user)
      mail(to: 'test@gmail.com', subject: 'Sample Mail', from: "<test@gmail.com>") do |format|
        format.html { render layout: 'path_to/other_mailer_layout' }
      end
    end  
  end