LoginSignup
0
0

【Rails】Mailerのプレビュー機能が表示される流れ(プレビュー機能が動作する経緯)

Posted at

Mailerのプレビュー機能が表示される流れ

Mailerを用いて、プレビュー機能(送信メールの確認画面を表示する機能)の処理の流れを理解に苦戦したため、自分用に備忘録として残しておきます。
※ざっくりとした流れだけですので、詳細については割愛してます。

私と同じ境遇の方の役に立てば幸いです。

環境

gem 'letter_opener_web'導入済み。

1.プレビュークラスの定義

今回は、下記のプレビューファイルを定義しています。

spec/mailers/previews/article_mailer_preview.rb
# 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メソッドを呼び出します。

app/mailers/article_mailer.rb
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上でプレビュー画面が表示されている。
Image from Gyazo

表示されているのは、プレビュークラスで定義されているメソッド名。
→今回の例だと、ArticleMailerPreview

この表示されているメソッド名のリンクをクリックすると、メソッドで記載されている処理が実行され、そのメソッド名のviewファイルがレンダリングされ、表示される。

※今回の例のメソッドの定義

app/mailers/article_mailer.rb
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ファイル

app/views/article_mailer/report_summary.text.erb
公開済の記事数: <%= @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

ブラウザ上に表示されたpreview画面
Image from Gyazo

生成されるURL:

http://localhost:3000/rails/mailers/article_mailer/report_summary

http://localhost:3000/rails/mailers/article_mailer/メソッド名

厳密に記載すると、下記のようになる。
http://localhost:3000/rails/mailers/[メーラークラスの小文字かつアンダースコア形式]/[プレビュークラス内のメソッド名]

最後に

以上、ざっくりとした説明ではありますが、Mailerのプレビュー機能が表示される流れについての説明でした。

今後も初学者ながらにでは、ありますがアウトプットしていこうと思いますので、宜しくお願い致します。

※誤りがあれば、教えていただけますと幸いです。🙏

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0