【Rails7.0】Action Mailerのプレビュー時に発生したエラーの解決方法
概要
Railsチュートリアルの11章を進めていた際、Action Mailerのプレビューコードを実装後に下記のリンクを確認した際に、
Unknown action Mailer preview 'user_mailer/account_activation' not found
というエラーが発生した。
問題
クリックすると…
Unknown action Mailer preview 'user_mailer/account_activation' not found
原因
原因はテストをデフォルトで使用されるminitestではなく、RSpecに変更したこと。
「rails generate mailer コントローラ名 アクション名」を実行した際に、デフォルトでは、test/mailers/previews/コントローラ名_preview.rbファイルが作成されるが、testファイル以下を削除していたせいか、またはRSpecを導入したことで、「spec/mailers/previews/user_mailer_preview.rb」に上記ファイルが作成された。
解決法①
これらのプレビュー用クラスは、デフォルトでtest/mailers/previewsに配置される。このパスはpreview_pathオプションで設定できる。たとえばlib/mailer_previewsに変更したい場合はconfig/application.rbに以下の設定を追加する。
config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"
これを元にすると下記になる
config.action_mailer.preview_path = "#{Rails.root}/spec/mailers/previews"
それを「config/application.rb」に追記しよう
require_relative "boot"
require "rails/all"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module FlowApp
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 7.0
config.action_mailer.preview_path = "#{Rails.root}/spec/mailers/previews"
# Configuration for the application, engines, and railties goes here.
#
# These settings can be overridden in specific environments using the files
# in config/environments, which are processed later.
#
# config.time_zone = "Central Time (US & Canada)"
# config.eager_load_paths << Rails.root.join("extras")
config.generators do |g|
g.test_framework :rspec,
view_specs: false,
helper_specs: false,
routing_specs: false
end
end
end
解決法②
user_mailer_preview.rbを「spec/mailers/previews/user_mailer_preview.rb」から「test/mailers/previews/user_mailer_preview.rb」へ移動する
参考
まとめ
Railsチュートリアルの11章を進めていた際、Action Mailerのプレビューコードを実装後に下記のリンクを確認した際に、
Unknown action Mailer preview 'user_mailer/account_activation' not found
というエラーが発生した。
原因はテストをデフォルトで使用されるminitestではなく、RSpecに変更したこと。
「rails generate mailer コントローラ名 アクション名」を実行した際に、デフォルトでは、test/mailers/previews/コントローラ名_preview.rbファイルが作成されるが、testファイル以下を削除していたせいか、またはRSpecを導入したことで、「spec/mailers/previews/user_mailer_preview.rb」に上記ファイルが作成された。
解決法は二つ
- 解決法①:「config/application.rb」に以下の設定を追加する。
- 解決法②:user_mailer_preview.rbを「spec/mailers/previews/user_mailer_preview.rb」から「test/mailers/previews/user_mailer_preview.rb」へ移動する
Discussion