当我说布局时,我不仅仅指视图,而是生成视图。在我自己的所有邮件中,我都使用默认布局。我在 SomeMailer.rb 文件中定义的
#some_mailer.rb
class SomeMailer < ActionMailer::Base
layout 'sometemplate'
有什么方法可以为 Devise Mailer 等人做到这一点吗?
当我说布局时,我不仅仅指视图,而是生成视图。在我自己的所有邮件中,我都使用默认布局。我在 SomeMailer.rb 文件中定义的
#some_mailer.rb
class SomeMailer < ActionMailer::Base
layout 'sometemplate'
有什么方法可以为 Devise Mailer 等人做到这一点吗?
在 Devise Github wiki 中找到了答案,
阅读有帮助。;-)
config.to_prepare do
Devise::Mailer.layout "simple" # simple.haml or simple.erb
Devise::Mailer.helper :mailer
end
以下是 wiki 页面的参考:How To: Create custom layouts
devise.rb中还有一个parent_mailer选项,假设您在设计之外发送电子邮件,默认情况下此选项设置为ActionMailer::Base,但如果您有一个已经从ActionMailer::Base继承的ApplicationMailer,您可以将parent_mailer更改为此并开箱即用地获取所有布局和配置。
在任何情况下,如果您不想更改设计邮件控制器中的任何内容,使用它来保持应用程序中布局的轨道流会更干净。
# devise.rb
config.parent_mailer = 'ApplicationMailer'
# application_mailer.rb
class ApplicationMailer < ActionMailer::Base
layout 'mailer'
end
# 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 服务器。
尝试重新打开 Devise::Mailer 类:
class Devise::Mailer < ActionMailer::Base
layout 'sometemplate'
end