Komei22 / rails-tutorial

rails-tutorialのsample_app作っていきます
0 stars 0 forks source link

ch9.1.1演習 #62

Closed Komei22 closed 7 years ago

Komei22 commented 7 years ago

演習1

コンソールを開き、データベースにある最初のユーザーを変数userに代入してください。その後、そのuserオブジェクトからrememberメソッドがうまく動くかどうか確認してみましょう。また、remember_tokenとremember_digestの違いも確認してみてください

irb(main):001:0> user = User.first
  User Load (0.1ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<User id: 1, name: "Rails Tutorial", email: "example@railstutorial.org", created_at: "2017-06-30 03:58:03", updated_at: "2017-07-04 05:29:03", password_digest: "$2a$10$TjA32mK54EfRy64AEtQfv.W07tQPppD1hG5YeQdaUK....", remember_digest: "$2a$10$TDpaawmm6doJ6oiZX53knuoPKDXJT8fOSi2Em32CTdg...">
irb(main):002:0> user.remember
   (0.1ms)  begin transaction
  SQL (0.4ms)  UPDATE "users" SET "updated_at" = ?, "remember_digest" = ? WHERE "users"."id" = ?  [["updated_at", "2017-07-04 05:31:33.988854"], ["remember_digest", "$2a$10$o.ttSj8tDU0RYgPqoFm57us2z4jW3pkc6f4ZN4GTP4eZTg8Im9J0C"], ["id", 1]]
   (2.6ms)  commit transaction
=> true
=> "JB_IXYNgLmie2jHe9emHgA"
irb(main):004:0> user.remember_digest
=> "$2a$10$o.ttSj8tDU0RYgPqoFm57us2z4jW3pkc6f4ZN4GTP4eZTg8Im9J0C"

remember_tokenを一時発行して、これをハッシュに通したものをremember_digestとしてデータベースに記憶する

演習2

リスト 9.3では、明示的にUserクラスを呼び出すことで、新しいトークンやダイジェスト用のクラスメソッドを定義しました。実際、User.new_tokenやUser.digestを使って呼び出せるようになったので、おそらく最も明確なクラスメソッドの定義方法であると言えるでしょう。 しかし実は、より「Ruby的に正しい」クラスメソッドの定義方法が2通りあります。1つはややわかりにくく、もう1つは非常に混乱するでしょう。テストスイートを実行して、リスト 9.4 (ややわかりにくい) や、リスト 9.5 (非常に混乱する) の実装でも、正しく動くことを確認してみてください。ヒント: selfは、通常の文脈ではUser「モデル」、つまりユーザーオブジェクトのインスタンスを指しますが、リスト 9.4やリスト 9.5の文脈では、selfはUser「クラス」を指すことにご注意ください。 わかりにくさの原因の一部はこの点にあります。

リスト9.4に書き換えた場合

14:39:21 - INFO - Running: test/models/user_test.rb
Started with run options --seed 17202

  9/9: [==============================================================================] 100% Time: 00:00:00, Time: 00:00:00

Finished in 0.11667s
9 tests, 18 assertions, 0 failures, 0 errors, 0 skips

リスト9.5に書き換えた場合

14:41:33 - INFO - Running: test/models/user_test.rb
Started with run options --seed 60635

  9/9: [==============================================================================] 100% Time: 00:00:00, Time: 00:00:00

Finished in 0.09463s
9 tests, 18 assertions, 0 failures, 0 errors, 0 skips