前提
Ruby on Rails チュートリアルをひととおり学び、webアプリを開発中ですが、改めて第11章のアカウント有効化メールについて気になったので質問させていただきます。
第11章を進めると、アカウントの有効化メールを送信できるようになりますが、送信は一度きりで、再送することができません。
公式ページの下部には再送機能を利用するには別途コードの追加が必要との記述があり、Devise gemを使う方法もあるそうですが、本チュートリアルではDeviseを使用していないため、使用せずに再送機能を追加できればと思っています。
疑問および実現したいこと
1. そもそも、なぜチュートリアルのとおりに進めていくと、送信機能は一度しか使えないのか?
2. Devise gemを使用せずにアカウント有効化メールの再送機能を追加したい
参考サイト
Railsチュートリアル公式ページ
https://railstutorial.jp/chapters/account_activation?version=5.0
第11章を終えた時点での公式サンプル
https://github.com/yasslab/sample_apps/tree/main/5_0/ch11
10/3 追記
ご回答を受け、メールの再送信を行うためのコントローラーを追加し、入力されたメールアドレスからユーザー情報を引き出して、アカウントの有効化メールの再送ができるように試行錯誤していますが、新たなエラーが出ていますので追記させていただきます。
新たに追加した機能周りに原因があると思うのですが、解決方法をお聞きできれば嬉しいです。
エラー内容
ActionController::UrlGenerationError in ResendActivations#create No route matches {:action=>"edit", :controller=>"account_activations", :email=>"#実際は入力されています", :id=>nil}, possible unmatched constraints: [:id]
エラーに該当していると思われる箇所
- account_activation_html
- user_mailer.rb
- user.rb
- resend_activations_controller.rb
- account_activation_html
<%= link_to "Activate", edit_account_activation_url(@user.activation_token, email: @user.email) %>
2. user_mailer.rb
class UserMailer < ApplicationMailer def account_activation(user) @user = user mail to: user.email, subject: "Account activation" end end
3. user.rb
class User < ApplicationRecord 〜 def send_activation_email UserMailer.account_activation(self).deliver_now end 〜 end
4. resend_activations_controller.rb
class ResendActivationsController < ApplicationController def new end def create @user = User.find_by(email: params[:resend_activation][:email].downcase) if @user.send_activation_email flash[:info] = "Please check your email to activate your account." redirect_to root_url else render 'resend' end end end
コメント
調べた限り、アカウント有効化メールの再送機能に関して取り扱ってる記事が極端に少なかったため、質問させていただきました。
初学者のため、至らない部分があれば申し訳ございません。
ご説明いただければ、大変うれしいです。
よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/10/03 11:02
2022/10/06 02:20
2022/10/06 02:23
2022/10/07 02:42