rails チュートリアル アカウントの有効化ができない。

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 67

takuo5

score 19

前提・実現したいこと

railsチュートリアルを学習中のものです。
11章の11.3のところで詰まっています。リンク内容
11.3.2でeditアクションに変更を加えて、リスト11.25にかかれているURLをブラウザでアクセスしましたが、アカウントが有効化されたというページが表示されず、下記のようなエラーメッセージが表示されます。
どなたか解決方法を教えていただけないでしょうか。

発生している問題・エラーメッセージ

Cannot GET /announcement/account_activations/-L9kBsbIjmrqpJGB0TUKcA/edit?email=michael%40michaelhartl.com```    

該当のソースコード

app/helpers/sessions_helper.rb  


module SessionsHelper  

# 渡されたユーザーでログインする  
def log_in(user)  
session[:user_id] = user.id  
end  

# ユーザーのセッションを永続的にする  
def remember(user)  
user.remember  
cookies.permanent.signed[:user_id] = user.id  
cookies.permanent[:remember_token] = user.remember_token  
end  

# 渡されたユーザーがログイン済みユーザーであればtrueを返す  
def current_user?(user)  
user == current_user  
end  

# 現在ログイン中のユーザーを返す (いる場合)  
def current_user  
if (user_id = session[:user_id])  
@current_user ||= User.find_by(id: user_id)  
elsif (user_id = cookies.signed[:user_id])  
user = User.find_by(id: user_id)  
if user && user.authenticated?(:remember, cookies[:remember_token])  
log_in user  
@current_user = user  
end  
end  
end  

# ユーザーがログインしていればtrue、その他ならfalseを返す  
def logged_in?  
!current_user.nil?  
end  

# 永続的セッションを破棄する  
def forget(user)  
user.forget  
cookies.delete(:user_id)  
cookies.delete(:remember_token)  
end  

# 現在のユーザーをログアウトする  
def log_out  
forget(current_user)  
session.delete(:user_id)  
@current_user = nil  
end  

# 現在ログイン中のユーザーを返す (いる場合)  
def current_user  
if (user_id = session[:user_id])  
@current_user ||= User.find_by(id: user_id)  
elsif (user_id = cookies.signed[:user_id])  
user = User.find_by(id: user_id)  
if user && user.authenticated?(:remember, cookies[:remember_token])  
log_in user  
@current_user = user  
end  
end  
end  

# 記憶したURL (もしくはデフォルト値) にリダイレクト  
def redirect_back_or(default)  
redirect_to(session[:forwarding_url] || default)  
session.delete(:forwarding_url)  
end  

# アクセスしようとしたURLを覚えておく  
def store_location  
session[:forwarding_url] = request.original_url if request.get?  
end  


end  
test/models/user_test.rb  


require 'test_helper'  

class UserTest < ActiveSupport::TestCase  

def setup  
@user = User.new(name: "Example User", email: "user@example.com",  
password: "foobar", password_confirmation: "foobar")  
end  

test "should be valid" do  
assert @user.valid?  
end  

test "name should be present" do  
@user.name = ""  
assert_not @user.valid?  
end  

test "email should be present" do  
@user.email = "     "  
assert_not @user.valid?  
end  

test "name should not be too long" do  
@user.name = "a" * 51  
assert_not @user.valid?  
end  

test "email should not be too long" do  
@user.email = "a" * 244 + "@example.com"  
assert_not @user.valid?  
end  

test "email validation should accept valid addresses" do  
valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org  
first.last@foo.jp alice+bob@baz.cn]  
valid_addresses.each do |valid_address|  
@user.email = valid_address  
assert @user.valid?, "#{valid_address.inspect} should be valid"  
end  
end  

test "email validation should reject invalid addresses" do  
invalid_addresses = %w[user@example,com user_at_foo.org user.name@example.  
foo@bar_baz.com foo@bar+baz.com]  
invalid_addresses.each do |invalid_address|  
@user.email = invalid_address  
assert_not @user.valid?, "#{invalid_address.inspect} should be invalid"  
end  
end  

test "email addresses should be unique" do  
duplicate_user = @user.dup  
@user.save  
assert_not duplicate_user.valid?  
end  

test "password should be present (nonblank)" do  
@user.password = @user.password_confirmation = " " * 6  
assert_not @user.valid?  
end  
#@user.password = @user.password_confirmationに空白を6個代入した時  
#@userは有効か → Falseである と言うテスト  

test "password should have a minimum length" do  
@user.password = @user.password_confirmation = "a" * 5  
assert_not @user.valid?  
end  
#@user.password = @user.password_confirmationにaを5個代入した時  
#@userは有効か → Falseである と言うテスト  

test "authenticated? should return false for a user with nil digest" do  
assert_not @user.authenticated?(:remember, '')  
end  
end  
#現状ではバリデーションが設定されていない略でGREENにならない→RED  
app/controllers/account_activations_controller.rb  

class AccountActivationsController < ApplicationController  

def edit  
user = User.find_by(email: params[:email])  
if user && !user.activated? && user.authenticated?(:activation, params[:id])  
user.update_attribute(:activated,    true)  
user.update_attribute(:activated_at, Time.zone.now)  
log_in user  
flash[:success] = "Account activated!"  
redirect_to user  
else  
flash[:danger] = "Invalid activation link"  
redirect_to root_url  
end  
end  
end  

試したこと

rails testを行いましたがエラーは出ませんでした。

下記URLをブラウザでアクセスすると上記のエラーメッセージが出ます。
https://rails-tutorial-mhartl.c9users.io/account_activations/
fFb_F94mgQtmlSvRFGsITw/edit?email=michael%40michaelhartl.com

補足情報(FW/ツールのバージョンなど)

AWS Cloud9

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • tktkt

    2019/09/16 16:32

    rails testではなく、ブラウザでアクセスした際にサーバー側でエラーはありませんか?
    もしなければ通信が発生する前のjavascript側でのエラーということになります。

    キャンセル

  • takuo5

    2019/09/16 17:08

    知識不足で申し訳ありません。
    サーバー側でのエラーというのはrails server を起動しているターミナル上で確認すればよろしいでしょうか?
    もしそうであれば、下記のように立ち上げたあとは何も変化はないままでした。
    ブラウザでURLにアクセスした後もなにも変化ありません。

    ~/environment/sample_app (account-activation) $ rails server
    => Booting Puma
    => Rails 5.1.6 application starting in development
    => Run `rails server -h` for more startup options
    Puma starting in single mode...
    * Version 3.9.1 (ruby 2.6.3-p62), codename: Private Caller
    * Min threads: 5, max threads: 5
    * Environment: development
    * Listening on tcp://localhost:8080
    Use Ctrl-C to stop

    キャンセル

  • tktkt

    2019/09/18 13:20

    とんでもございません。
    かくいう私もrailsでwebpackを扱ったことないのですが、ブラウザ側で起きているエラーなような気がします。
    なので、上記のテストやrbファイルに原因はないかもしれません。
    もし他に回答やコメントなければ、該当のエラーとrailsのwebpackの設定関連の部分を調べられると良いと思います。

    キャンセル

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

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

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる