かすたあどくりいむ定食

育児、プラモ、音楽(バンド)が趣味なエンジニア(かもしれない)ブログです。

Rails tutorial2週目やってみた1

どうも!!9月です。 まだまだクソ暑いです。暑すぎます。とっとと涼しくなってほしいと願っています。

今回2ヶ月ほど前にやったRails tutorialの2週目にチャレンジしています。チャレンジといっても、どちらかというと復習や、当時分からなかったところを理解することに重心をおいてます。2週目なので多少なり景色が変わっているだろうと。

一応1章からやっています。しかし、1章目からエラーが出て少し躓きました。 そこで記事を書いたのでここに載せておきます。

qiita.com

ここで少し詰まった以降を順調に進めることができました。しかし、6章のユーザーモデルの作成あたりから難しくなってきました。

6章

email属性を小文字に変換してメールアドレスの一意性を保証する

class User < ApplicationRecord
  before_save { self.email = email.downcase }
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
end

こちらのbefore_saveでコールバックしブロック処理をしてemailをdowncaseメソッドで小文字変換しています。 右側のemailもself.emailと書くこともできます。

ハッシュ化されたパスワード

class User < ApplicationRecord
  .
  .
  .
  has_secure_password
end

railsのhas_secure_passwordメソッドを追加すると

・セキュアにハッシュ化したパスワードを、データベース内のpassword_digestという属性に保存できるようになる。 ・2つのペアの仮想的な属性 (passwordとpassword_confirmation) が使えるようになる。また、存在性と値が一致するかどうかのバリデーションも追加される18 。 ・authenticateメソッドが使えるようになる (引数の文字列がパスワードと一致するとUserオブジェクトを、間違っているとfalseを返すメソッド)

has_secure_password機能を使うにはモデル内にpassword_digestという属性が含まれているのが条件だそうです。

has_secure_passwordをUserモデルに追加したことで、そのオブジェクト内でauthenticateメソッドが使えるようになります。 このauthenticateメソッドは、引数に渡された文字列 (パスワード) をハッシュ化した値と、データベース内にあるpassword_digestカラムの値を比較します

  今回は6章のユーザーモデル作成の部分で改めて学べたことについてかきました。