Mailerのプレビュー機能が表示される流れ
Mailerを用いて、プレビュー機能(送信メールの確認画面を表示する機能)の処理の流れを理解に苦戦したため、自分用に備忘録として残しておきます。
※ざっくりとした流れだけですので、詳細については割愛してます。
私と同じ境遇の方の役に立てば幸いです。
環境
gem 'letter_opener_web'
導入済み。
1.プレビュークラスの定義
今回は、下記のプレビューファイルを定義しています。
# Preview all emails at http://localhost:3000/rails/mailers/article_mailer
class ArticleMailerPreview < ActionMailer::Preview
def report_summary
ArticleMailer.report_summary
end
end
ArticleMailerPreview
クラスでは、ArticleMailer
クラスのreport_summary
メソッドを呼び出します。
↓
class ArticleMailer < ApplicationMailer
def report_summary
@published_article_count = Article.published.count
@articles_on_published_yesterday = Article.published_yesterday
mail(to: 'admin@example.com', subject: '公開済記事の集計結果')
end
end
プレビューファイルのディレクト配置について
公式ドキュメントに記載のある通り、test配下のディレクトリに配置する。
※今回のtestは、rspec
mailer_preview.rb ファイルは、test配下のディレクトリに配置する。
2.プレビューのアクセスポイント
http://localhost:3000/rails/mailers/article_mailer
というURLは、Railsのメーラープレビュー機能によって提供され、アクセスすると、アプリケーションで定義されているすべてのメーラープレビューのリストを表示されます。
http://localhost:3000/rails/mailers/article_mailer
の説明
http://localhost:3000/rails/mailers/[メーラークラスの小文字かつアンダースコア形式]
上記のURLにアクセスすると、下記のような画面がブラウザ上で表示される。※gem 'letter_opener_web'
を導入しているため、web上でプレビュー画面が表示されている。
表示されているのは、プレビュークラスで定義されているメソッド名。
→今回の例だと、ArticleMailerPreview
この表示されているメソッド名のリンクをクリックすると、メソッドで記載されている処理が実行され、そのメソッド名のviewファイルがレンダリングされ、表示される。
※今回の例のメソッドの定義
class ArticleMailer < ApplicationMailer
def report_summary
@published_article_count = Article.published.count
@articles_on_published_yesterday = Article.published_yesterday
mail(to: 'admin@example.com', subject: '公開済記事の集計結果')
end
end
※今回の例のviewファイル
公開済の記事数: <%= @published_article_count %>件
<% if @articles_on_published_yesterday.present? %>
昨日公開された記事数: <%= @articles_on_published_yesterday.count %>件
<% @articles_on_published_yesterday.each do |article| %>
タイトル: <%= article.title %>
<% end %>
<% else %>
昨日公開された記事はありません
<% end %>
3.メーラープレビューの表示
プレビュークラス内で定義されたメソッド名(この場合はreport_summary
)に対応するリンクをクリックすると、そのメソッドが実行され、ArticleMailer
クラスのreport_summary
メソッドによって生成されたメールのプレビューが表示されます。
この時、app/views/article_mailer/report_summary.text.erb
(または.html.erb
など)のテンプレートがレンダリングされ、その内容がブラウザ上で確認できるようになります。
ファイルの命名は、メソッド名.text.erb
生成されるURL:
http://localhost:3000/rails/mailers/article_mailer/report_summary
http://localhost:3000/rails/mailers/article_mailer/メソッド名
厳密に記載すると、下記のようになる。
http://localhost:3000/rails/mailers/[メーラークラスの小文字かつアンダースコア形式]/[プレビュークラス内のメソッド名]
最後に
以上、ざっくりとした説明ではありますが、Mailerのプレビュー機能が表示される流れについての説明でした。
今後も初学者ながらにでは、ありますがアウトプットしていこうと思いますので、宜しくお願い致します。
※誤りがあれば、教えていただけますと幸いです。🙏
参考記事