Ruby on RailsでメーラーのViewはデフォルトでapp/views配下に置かれてしまい数が多くなってくるとControllerからrenderされるものとMailerからrenderされるものが混在してしまい見通しが悪くなるケースがあります。
メーラーのビューは
app/views/name_of_mailer_classディレクトリに置かれます。
Action Mailer の基礎 - Railsガイド
そういうわけでメーラー関連のファイルはapp/mailers配下に集約する方法をメモ📝
やり方
目指す姿は以下のような感じで、mailer配下にviewsを持ち、そこにlayoutや各mailerのviewを配置することを目指します。
app/mailers
├── application_mailer.rb
├── sample_mailer.rb
└── views
├── layouts
│ ├── application_mailer.html.erb
│ └── application_mailer.text.erb
└── sample_mailer
├── sample_mail.html.erb
└── sample_mail.text.erb
やり方は、そこまで難しくなくて以下のようなApplicationMailerを用意してあげるだけで大丈夫でした!
class ApplicationMailer < ActionMailer::Base default from: "from@example.com" layout Rails.root.join("app/mailers/views/layouts/application_mailer") prepend_view_path "app/mailers/views" end
layout Rails.root.join("app/mailers/views/layouts/application_mailer")でapp/mailers内のlayout用のファイルを参照するようにし、
別のレイアウトファイルを明示的に指定したい場合は、メーラーでlayoutを呼び出します。
Action Mailer の基礎 - Railsガイド
prepend_view_path "app/mailers/views"でviewの参照パスにapp/mailers/viewsを追加しています。
prepend_view_pathメソッドやappend_view_pathメソッドを用いることで、パスの解決時に優先して検索される別のディレクトリを追加できます。
Action View の概要 - Railsガイド