どうも!!9月です。 まだまだクソ暑いです。暑すぎます。とっとと涼しくなってほしいと願っています。
今回2ヶ月ほど前にやったRails tutorialの2週目にチャレンジしています。チャレンジといっても、どちらかというと復習や、当時分からなかったところを理解することに重心をおいてます。2週目なので多少なり景色が変わっているだろうと。
一応1章からやっています。しかし、1章目からエラーが出て少し躓きました。 そこで記事を書いたのでここに載せておきます。
ここで少し詰まった以降を順調に進めることができました。しかし、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章のユーザーモデル作成の部分で改めて学べたことについてかきました。