当我说布局时,并不仅仅是指视图,因为这些视图都是我自己生成的。在我的所有邮件发送器中,我都使用默认布局,这个默认布局是我在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
这里是维基页面的参考链接:如何创建自定义布局
在devise.rb
中也有一个parent_mailer
选项,假设你要在devise之外发送电子邮件,则默认情况下此选项设置为ActionMailer :: Base
。但是,如果您已经有一个从ActionMailer :: Base
继承的ApplicationMailer
,则可以将parent_mailer
更改为此选项,并获得所有预设的layouts
和configurations
。
无论如何,如果您不想更改devise邮件控制器中的任何内容,使用此方法可以使应用程序中的Rails流程保持更整洁。
# 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服务器。
class Devise::Mailer < ActionMailer::Base
layout 'sometemplate'
end
setup
块之前,在devise.rb
初始化器的顶部添加Devise::Mailer.layout "simple"
。这将更改 Devise 发送的电子邮件的布局。 - leppert# email.haml 或 email.erb
是什么意思吗?你是不是想写# simple.haml 或 simple.erb
? - John BachirDevise :: Mailer.layout“ simple”
。在后期gem版本中,config.to_prepare会引发错误。 - vladCovaliovconfig.to_prepare
需要放在你的application.rb
中,或者你可以在devise.rb
中使用Rails.application.config.to_prepare
。链接提供了很多详细信息。 - stephen.hanson