前提・実現したいこと
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
ここにより詳細な情報を記載してください。
エラーはCannot GET ~のみですか?
その前後の文はありませんか?
ありがとうございます!
エラーはCannot GET ~ の1行のみです。
ブラウザのエラーだけでなく、サーバー側のエラーはありませんか?
サーバー側のエラーはありませんでした。
rails test
Running via Spring preloader in process 6936
Started with run options --seed 5878
37/37: [=================================================================================================================================] 100% Time: 00:00:01, Time: 00:00:01
Finished in 1.68797s
37 tests, 155 assertions, 0 failures, 0 errors, 0 skips
rails testではなく、ブラウザでアクセスした際にサーバー側でエラーはありませんか?
もしなければ通信が発生する前のjavascript側でのエラーということになります。
知識不足で申し訳ありません。
サーバー側でのエラーというのは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
とんでもございません。
かくいう私もrailsでwebpackを扱ったことないのですが、ブラウザ側で起きているエラーなような気がします。
なので、上記のテストやrbファイルに原因はないかもしれません。
もし他に回答やコメントなければ、該当のエラーとrailsのwebpackの設定関連の部分を調べられると良いと思います。
回答1件
あなたの回答
tips
プレビュー