railsチュートリアル第七章 ユーザー登録成功


ユーザー登録成功

新規ユーザーを実際にデータベースに保存できるようにし、ユーザー登録フォームを完成させる。
ユーザー情報は自動的にデータベースに登録させる。
ブラウザの表示をリダイレクトして、登録されたユーザーのプロフィールを表示
ウェルカムメッセージも表示させる。

登録

require 'test_helper'

class UsersSignupTest < ActionDispatch::IntegrationTest
  test "invalid signup information" do
    get signup_path
    # signupのページにアクセス
    assert_no_difference 'User.count' do
    # ユーザー数が変わらないかをテストする
      post users_path, params: { user: { name:  "",
                                 # ハッシュのハッシュのようになっているように見える
                                         email: "user@invalid",
                                         password:              "foo",
                                         password_confirmation: "bar" } }
      # postリクエストを送信 フォーム送信をテストする
      # データの投稿した後 assert_no_difference で違いを比べるらしい。
    end
    assert_template 'users/ne  end
end
redirect_to @User 

上と下は等価のコード

redirect_to user_url(@user)

演習

1.有効な情報を送信し、ユーザーが実際に作成されたことを、Railsコンソールを使って確認してみましょう。

>> User.second
  User Load (0.2ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? OFFSET ?  [["LIMIT", 1], ["OFFSET", 1]]
=> #<User id: 4, name: "aa", email: "[email protected]", created_at: "2021-10-04 13:16:25", updated_at: "2021-10-04 13:16:25", password_digest: [FILTERED]>

2.リスト 7.26を更新し、redirect_to user_url(@user)とredirect_to @userが同じ結果になることを確認してみましょう。

class UsersController < ApplicationController
.
.
.
  def create
    @user = User.new(user_params)
    # 外部メソッドを使う
    if @user.save
      # 保存の成功をここで扱う。
      redirect_to user_url(@user)
      # urlを指定して表示する
      # 保存成功したらurlを表示する
    else
      render 'new'
      # 保存に成功しなければnewアクションに移動する
      # 失敗したらまた戻る
    end
  end

  private
  #外部から使えないようにする

    def user_params
    # Usersコントローラの内部でのみ実行される
    # Web経由で外部ユーザーにさらされない
       params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)
    end
end

新しくデータを保存して同じ画面が表示されたので確認