Railsチュートリアル 第6章 メモ書き
○データベースについて
・モデル:
Railsデフォルトのデータ構造。
永続的・長期的にデータを保存する。
データベースにリクエストを行うデフォルトのライブラリはActiveRecord。
データ行で構成されるテーブルを持ち、各列(カラム)はデータ属性(文字列:String、
数値:integerなど)を持つ。
・マイグレーション:
データベースに変更を加えるためchangeメソッドのファイル。コンソールで以下の命令を行うと、idとString型のname、emailカラムを持つ(+作成・更新時のタイムスタンプ)Userテーブルを作るためのマイグレーションが
作成される。
$ rails generate model User name:string email:string
実行自体には次の命令が必要。
rails db:migrate
・ユーザーオブジェクト:
データベースに含まれるユーザーのデータ。
ユーザーモデルはActiveRecordのモデルを継承しているため、ActiveRecordのメソッドを使える。
new、save、create、destroy、find、first、all、updateなど
・バリデーション:
1)存在性 validates :name, presence: true
nameカラムには空白のデータを保存できない
2)長さ validates :email, length: { maximum(minimum): 255(5) }
emaiカラムの最長は255文字(最低5文字)
3)フォーマット format: { with: VALID_EMAIL_REGEX }
指定したフォーマットに従う文字列のみ保存可。valid_email_regexは正規表現
→ VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/I(メールアドレス用)
4)一意性 uniqueness: true
登録ユーザーの重複を避ける
※同時に複数のリクエストが入った場合、一意性を保てない場合が
→マイグレーションでデータベースにindexカラムの追加
add_index :users, :email, unique: true
コールバック:ある特定の時点で呼び出されるメソッド
before_save { self.email = email.downcase }
→ユーザーをデータベースに保存する前にemail属性を強制的に小文字に変換する
・ハッシュ化:
入力されたデータを元に戻せない不可逆なデータにする処理。一般的にはパスワードの保存に使用される。
→モデル中に「has_secure_password」というメソッドを入れることで次の機能が使えるように
1)ハッシュ化パスワードをpassword_digestというデータベース内カラムに保存できるように(マイグレーションは必要)
2)passwordとpassword_confirmationが使えるように+存在性と値一致のバリデーション
3)authenticateメソッドが使用可に
※ハッシュ化にはbcryptGemもGemfileに必要
・Authenticate:
引数に渡された文字列(パスワード)をハッシュ化した値と、データベース内の
password_digestカラムの値を比較し、正しい値が引数に渡されていればtrue、それ以外はfalseを返すメソッド。