質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

解決済

Ruby on Rails チュートリアル アカウント有効化メールの再送機能

jack20xx
jack20xx

総合スコア44

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

2回答

0リアクション

0クリップ

185閲覧

投稿2022/10/01 01:13

編集2022/10/03 10:58

前提

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]

エラーに該当していると思われる箇所

  1. account_activation_html
  2. user_mailer.rb
  3. user.rb
  4. resend_activations_controller.rb

  1. 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

コメント

調べた限り、アカウント有効化メールの再送機能に関して取り扱ってる記事が極端に少なかったため、質問させていただきました。
初学者のため、至らない部分があれば申し訳ございません。
ご説明いただければ、大変うれしいです。
よろしくお願いいたします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。