ぞえの技術めも

Ruby on Rails勉強中

【94日目】【1日20分のRailsチュートリアル】【第8章】演習の1.

Ruby on Railsチュートリアル(第3版)

今日は「8.6 演習」から。

8.6 演習

railstutorial.jp

なお、演習とチュートリアル本編の食い違いを避ける方法については、演習用のトピックブランチに追加したメモ (3.6) を参考にしてください。

演習用にブランチ切っておく。

$ git checkout log-in-log-out
$ git checkout -b log-in-log-out-exercises                                                                  
  1. リスト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 << selfenddigestnew_tokenメソッドを囲む感じ。

テスト実行して問題ないことを確認。

$ bundle exec rake test
29 tests, 67 assertions, 0 failures, 0 errors, 0 skips

正直内容の理解はできていないけど…まぁいいか。
Rubyの勉強はまた追々かな。

今日の作業時間は【26分】

次は「8.6 演習」の2.から。