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ガイド