如何配置设计以使用自定义电子邮件布局?

hol*_*den 32 ruby-on-rails mailer devise ruby-on-rails-3

当我说布局时我并不仅仅意味着视图,我生成那些.在我自己的邮件上,我正在使用默认布局.我在SomeMailer.rb文件中定义

#some_mailer.rb
class SomeMailer < ActionMailer::Base
  layout 'sometemplate'
Run Code Online (Sandbox Code Playgroud)

我是否可以通过某种方式为Devise Mailer等人做到这一点?

hol*_*den 55

找到答案坐在Devise Github wiki中,

阅读有帮助.;-)

config.to_prepare do
  Devise::Mailer.layout "simple" # simple.haml or simple.erb
  Devise::Mailer.helper :mailer
end
Run Code Online (Sandbox Code Playgroud)

以下是Wiki页面的参考:如何:创建自定义布局

  • 或者,您可以在设置块之前将`​​Devise :: Mailer.layout"simple"添加到`devise.rb`初始化程序的顶部. (11认同)
  • 仅使用```Devise :: Mailer.layout“ simple”```。config.to_prepare在更高的gem版本中引发错误。 (2认同)

Mat*_*ith 19

# Devise::Mailer inherits from ActionMailer::Base other mail will work fine.

## app/mailers/deviser_mailer.rb

class DeviseMailer < Devise::Mailer
  layout 'email'
  default from: I18n.t("mailer.default.from")
end

## then in config/initializer/devise.rb

# Configure the class responsible to send e-mails.
config.mailer = "DeviseMailer"
Run Code Online (Sandbox Code Playgroud)

确保在更改初始化程序时重新启动rails服务器.


Ale*_*xis 15

还有一个parent_mailer在选项devise.rb,让我们说你是色器件外发送电子邮件,默认情况下此选项设置为的ActionMailer :: Base的,但如果你有一个ApplicationMailer已经被继承的ActionMailer :: Base的,你可以将parent_mailer更改为this并获得开箱即用的所有布局配置.

在任何情况下,如果您不想在设计邮件程序控制器中更改任何内容,那么使用它来保持应用程序中的布局流量更加清晰.

# devise.rb
config.parent_mailer = 'ApplicationMailer'
Run Code Online (Sandbox Code Playgroud)
# application_mailer.rb
class ApplicationMailer < ActionMailer::Base
    # if you need to add a helper module for example
    add_template_helper(EmailHelper)
    layout 'mailer'
end
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案。 (3认同)