【94日目】【1日20分のRailsチュートリアル】【第8章】演習の1.
今日は「8.6 演習」から。
8.6 演習
なお、演習とチュートリアル本編の食い違いを避ける方法については、演習用のトピックブランチに追加したメモ (3.6) を参考にしてください。
演習用にブランチ切っておく。
$ git checkout log-in-log-out $ git checkout -b log-in-log-out-exercises
- リスト8.32では、明示的にUserをプレフィックスとして、新しいトークンやダイジェストのクラスメソッドを定義しました。
(中略)
リスト8.59やリスト8.60の文脈では、selfはUser「クラス」を指すことにご注意ください。わかりにくさの原因の一部はこの点にあります)。
うーん、文章長くなってきましたね。。。
「Ruby的に正しい」クラスメソッドの定義方法
について学習する演習っぽい。
リスト8.59: selfを使ってトークンやダイジェストの新しいメソッドを定義する
User.digest(string)
のようにUser
としていたところをself
にしても問題ないことを確認する。
app/models/user.rb
: # 与えられた文字列のハッシュ値を返す def self.digest(string) cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost BCrypt::Password.create(string, cost: cost) end # ランダムなトークンを返す def self.new_token SecureRandom.urlsafe_base64 end :
テスト実行して問題ないことを確認。
$ bundle exec rake test 29 tests, 67 assertions, 0 failures, 0 errors, 0 skips
リスト8.60: class << selfを使ってトークンやダイジェストの新しいメソッドを定義する
class << self
としてUser
を外しても問題ないことを確認する。
app/models/user.rb
: class << self # 与えられた文字列のハッシュ値を返す def digest(string) cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost BCrypt::Password.create(string, cost: cost) end # ランダムなトークンを返す def new_token SecureRandom.urlsafe_base64 end end :
class << self
とend
でdigest
とnew_token
メソッドを囲む感じ。
テスト実行して問題ないことを確認。
$ bundle exec rake test 29 tests, 67 assertions, 0 failures, 0 errors, 0 skips
正直内容の理解はできていないけど…まぁいいか。
Rubyの勉強はまた追々かな。
今日の作業時間は【26分】。
次は「8.6 演習」の2.から。