web-dev-qa-db-ja.com

カスタム電子メールレイアウトを使用するようにデバイスを構成するにはどうすればよいですか?

私がレイアウトと言うとき、私は単にビューを意味するのではなく、それらを生成します。私自身のすべてのメーラーでは、デフォルトのレイアウトを使用しています。 SomeMailer.rbファイルで定義します

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

Devise Mailer et al。のためにこれを行う方法はありますか?

33
holden

Devise Githubwikiに答えが見つかりました。

役立つ読書。 ;-)

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

Wikiページのリファレンスは次のとおりです。 ハウツー:カスタムレイアウトを作成する

55
holden
# 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サーバーを再起動してください。

19
Matt Smith

devise.rbにはparent_mailerオプションもあります。たとえば、デバイスの外部でメールを送信しているとします。デフォルトでは、このオプションです。はActionMailer :: Baseに設定されていますが、ActionMailer :: Baseから既に継承しているApplicationMailerがある場合は、parent_mailerこれに、すべてのlayoutsおよびconfigurationsをそのまま取得します。

いずれにせよ、デバイスメーラーコントローラーで何も変更したくない場合は、これを使用してアプリケーションのレイアウトのRailsフローを維持する方がはるかにクリーンです。

# 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
12
Alexis