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

时间:2011-02-15 19:39:17

标签: ruby-on-rails ruby-on-rails-3 devise mailer

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

#some_mailer.rb
class SomeMailer < ActionMailer::Base
  layout 'sometemplate'

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

4 个答案:

答案 0 :(得分:55)

在Devise Github wiki中找到答案,

阅读有帮助。 ; - )

config.to_prepare do
  Devise::Mailer.layout "simple" # simple.haml or simple.erb
  Devise::Mailer.helper :mailer
end

以下是维基页面的参考:How To: Create custom layouts

答案 1 :(得分: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"

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

答案 2 :(得分:10)

devise.rb 中还有一个 parent_mailer 选项,假设您在设计之外发送电子邮件,默认情况下此选项设置为 ActionMailer: :Base ,但如果您有 ApplicationMailer 已经从 ActionMailer :: Base 继承,则可以将 parent_mailer 更改为此并开箱即可获得所有布局配置

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

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

答案 3 :(得分:-2)

尝试重新打开Devise :: Mailer类:

 class Devise::Mailer < ActionMailer::Base
   layout 'sometemplate'
 end