Rails Devise でパスワードリセットなどのメールテンプレート(Mailer ビュー)をカスタマイズ

スポンサーリンク

Devise の Mailer のテンプレートを独自にカスタマイズする方法です。パスワードリセット(Recoverable モジュール)の機能などで Devise の Mailer が利用されます。

— 環境 —
rails 5.0.0.1
devise 4.2

【追記 2016/11/08】
Rails 5 + Devise 4.2 の最新バージョンで正常に動作することを確認しました。
【追記ここまで】

— 記事初回公開時の環境 —
Rails 4.0.1
Devise 3.2.2

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

事前に Devise で使われるビューをカスタマイズするために、以下のコマンドを実行します。

詳しくは以下を参照。

Rails で Devise のビューを作成してカスタマイズ | EasyRamble

パスワードリセットのメールテンプレートを確認

app/views/users/mailer/reset_password_instructions.html.erb

メールテンプレートは I18n での翻訳を前提として生成されています。ちなみに、このメールテンプレートを生成する generator は、以下のファイルが元のソースです。

devise3.2.2/lib/generators/templates/markerb/reset_password_instructions.markerb

I18n 用の yaml 翻訳ファイルを作成

生成されたメールのテンプレートを参考にして、以下のように日本語と英語の翻訳ファイルを作成します。

config/locales/views/users/mailer.ja.yml

config/locales/views/users/mailer.en.yml

私は Recoverable モジュール(reset_password_instructions)のみの利用ですが、一応 Confirmarable モジュール(confirmation_instructions)、Lockable モジュール(unlock_instructions)の分も翻訳しておきました。

カスタマイズ用の Mailer を作成

Mailer のテンプレートを独自に作成するだけだと動きません。ま、そりゃそうか。

How To: Use custom mailer

ということで、モデル(ここでは User モデル)に合わせて独自の Mailer を Devise::Mailer を継承して作成します。

app/controllers/users/mailer.rb

Devise::Mailer は、devise-3.2.2/app/mailers/devise/mailer.rb に定義されている。とりあえずアクションに関しては、デフォルトのままで良いので継承するだけで中身はなし。

あとは、config/initializers/devise.rb で以下を設定します。

config/initializers/devise.rb

Mailer のアクションを独自にカスタマイズする場合は、以下のように Devise::Mailer のアクションをオーバーライドすれば良いです。

以上で、Devise Mailer のテンプレートをカスタマイズできます。実際のメール送信確認や RSpec によるテストでも正常な動作を確認できました。Rails で ActionMailer を RSpec でテストするのは以下を参照。

ActionMailer のメール送信テストを RSpec で行う | EasyRamble

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク

Leave Your Message!