勉強履歴(と雑記)

プログラミング初心者のメモ書きです

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を返すメソッド。