Closed Komei22 closed 7 years ago
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としてデータベースに記憶する
リスト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
演習1
コンソールを開き、データベースにある最初のユーザーを変数userに代入してください。その後、そのuserオブジェクトからrememberメソッドがうまく動くかどうか確認してみましょう。また、remember_tokenとremember_digestの違いも確認してみてください
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に書き換えた場合
リスト9.5に書き換えた場合