Rails Tutorial 第11章 演習11.3.1.1で「ユーザーを作成」の意味を取り違えました

演習11.3.1.1で
>コンソール内で新しいユーザーを作成してみてください。

の意味を取り違えました。

```bash
>> a = User.new
=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil, remember_digest: nil, admin: false, activation_digest: nil, activated: false, activated_at: nil>
>> a.remember_token
=> nil
>> a.activation_token
=> nil
>> a.activation_digest
=> nil
>> a.remember_digest
=> nil
```


で次の設問の
>authenticated?メソッドを使って、先ほどの各トークン/ダイジェストの組み合わせで認証が成功することを確認してみましょう。 

だと、各値がNilでは意味がないので、前の答えがおかしいと気が付きました。

ネットの他の方の解答例を見たところ、パスワードなど画面から入れる値を入れていました。

```bash
>> c = User.create(name:"testc", email:"testc@example.com", password:"password", password_confirmation:"password")                  
   (0.1ms)  SAVEPOINT active_record_1
  User Exists (0.2ms)  SELECT  1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) LIMIT ?  [["email", "testc@example.com"], ["LIMIT", 1]]
  SQL (3.6ms)  INSERT INTO "users" ("name", "email", "created_at", "updated_at", "password_digest", "activation_digest") VALUES (?, ?, ?, ?, ?, ?)  [["name", "testc"], ["email", "testc@example.com"], ["created_at", "2020-08-10 01:04:28.128837"], ["updated_at", "2020-08-10 01:04:28.128837"], ["password_digest", "$2a$10$rxEuvouJODOPivT9km05QeLxMKDG8UFrhA5bDLw2Yowipqztf1kv."], ["activation_digest", "$2a$10$mHqR6NBBZd1.TQ0BBB.7MO0etFtY/iJ49ekHITPxRnGNtZrsn2Q6."]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
=> #<User id: 102, name: "testc", email: "testc@example.com", created_at: "2020-08-10 01:04:28", updated_at: "2020-08-10 01:04:28", password_digest: "$2a$10$rxEuvouJODOPivT9km05QeLxMKDG8UFrhA5bDLw2Yow...", remember_digest: nil, admin: false, activation_digest: "$2a$10$mHqR6NBBZd1.TQ0BBB.7MO0etFtY/iJ49ekHITPxRnG...", activated: false, activated_at: nil>
>> 

>> c.activation_token
=> "3pW5D8gy1tqxXbGat8n4Ug"
>> c.activation_digest
=> "$2a$10$mHqR6NBBZd1.TQ0BBB.7MO0etFtY/iJ49ekHITPxRnGNtZrsn2Q6."
>> c.authenticated?(:activation, "3pW5D8gy1tqxXbGat8n4Ug")
=> true
```

rememberがnilなのでこのままではテストができません。

```bash
>> c.remember_token
=> nil
>> c.remember_digest
=> nil
>> c.authenticated?(:remember, "")                                                                            
=> false
```

rememberの値を入れる方法が分かりません。なので値を入れた箇所を調べます。
何となくsessionだろうと当たりをつけ、sessions_controller.rbを調べると

```ruby:sessions_controller.rb
  def create
..
      params[:session][:remember_me] == "1" ? remember(@user) : forget(@user)
```

がありました。次にrememberというメソッドを探します。
このファイルにはなかったので、ヘルパーだろうとあたりをつけて調べると、

```ruby:sessions_helper.rb
 def remember(user)
    user.remember
    cookies.permanent.signed[:user_id] = user.id
    cookies.permanent[:remember_token] = user.remember_token
  end
```

とremeberメソッドが見つかりました。
remember_tokenの値を使っているので、その2行前のuser.rememberメソッドを調べます。
このファイルにはなかったので、user.controllerを調べますがありません。
modelにあるかもと調べてみると、

```ruby:user.rb
 def remember
    self.remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(remember_token))
  end
```

が見つかりました。ここでremember_tokenに値を入れていました！
その下の行でremember_digestも更新しています。
なのでこのrememberメソッドを使えばいいのではと考えました。
コンソールから実行してみます。

```bash
>> c.remember
   (0.1ms)  SAVEPOINT active_record_1
  SQL (0.1ms)  UPDATE "users" SET "updated_at" = ?, "remember_digest" = ? WHERE "users"."id" = ?  [["updated_at", "2020-08-10 01:40:58.713388"], ["remember_digest", "$2a$10$6n1JvfvzKvzDfmDP75oxpO.CBQIHvHilkXqkMReiGKcIYLXeyJ9tm"], ["id", 102]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
=> true
```

値が入ったか確認します。

```bash
>> c.remember_token
=> "sDtmRJlt87nEwH6z7tsyyw"
>> c.remember_digest
=> "$2a$10$6n1JvfvzKvzDfmDP75oxpO.CBQIHvHilkXqkMReiGKcIYLXeyJ9tm"
```

無事値が入りました！
改めて演習2の続きです。

```bash
>> c.authenticated?(:remember,c.remember_token)
=> true
```

動きました。
テストのロジックを考えるよりも、テストデータを揃えることのほうが大変なんだと感じました。