Rails Tutorialで学べることメモ-第6章-
Rails Tutorial を改めてしっかりやり直してのメモ第 6 章編
https://railstutorial.jp/chapters/modeling_users?version=7.0
主要機能
has_secure_password
モデルにこのメソッドを追加すると、セキュアなパスワード機能が実装される。
- ハッシュ化したパスワードを DB の
password_digest
に保存する - DB にはない仮想の属性
password
とpassword_confirmation
が利用可能になる - パスワードの存在性と値一致のバリデーションが追加される
authenticate
メソッドが使えるようになる
ひとつ目の機能を実現するために、DB にカラム追加をする必要がある。
さらにハッシュ化のためにbcrypt
gem も追加する必要がある。
知識
モデル
Rails でデータモデルとして扱うデフォルトのデータ構造。
データを永続化するデフォルトの解決策はデータベースを利用し、DB と通信する Rails ライブラリを ActiveRecord と呼ぶ。
ActiveRecord はデータベーステーブルの 1 行が 1 つのクラスにラップされ、そのクラスインスタンスが 1 行に対応するデザインパターンを刺す言葉であり、Rails 特有の言葉ではない。
永続化
例えばUser.new
しただけでは、メモリ上にオブジェクトを生成しただけであり、実行プロセスを終了すると揮発する。
DB に保存する場合は、save
メソッドなどを呼ぶ必要がある。
DB の更新
update
メソッドは属性のハッシュを受け取る。
データのバリデーションが成功したら、更新と保存を続けて行う。
特定の項目のみを更新するupdate_attribute
メソッドも存在するが、こちらはバリデーションを実行せすに値を更新する。
メールアドレス
メールアドレスの大文字小文字は、技術的にはドメイン部分のみ区別しないらしい。
つまり、[email protected]
と[email protected]
は別のアドレスとして扱うことができる。
ただし、これは非常に混乱するのでプロバイダもサービスも多くの場合は全て小文字に統一して認識するようになっている。
ユーザー認証
認証処理の基本的な流れは次の通り。
- パスワードの送信
- パスワード文字列のハッシュ化
- DB 内のハッシュ化された値との比較
ハッシュ化とは、ざっくり言えば不可逆な変換関数で文字列を変換すること。
ハッシュ化した値を DB に保存することで、もし漏洩しても元の文字列はわからない。
細かな知識
- Rails ではコントローラーは複数形、モデルは単数系を用いる
- migration ファイルのファイル名のタイムスタンプは以前はインクリメンタルな整数だったが、チーム開発で重複が発生し得たので変更された
t.timestamp
で作られるcreated_at
,updated_at
はマジックカラムと呼ばれる- 例外とエラーハンドリングは Rails チュートリアル内では深く扱われない
reload
は DB に保存された情報を再読み込みする- バリデーションに失敗した時のメッセージは
model_instance.errors.messages
でアクセスできる- ハッシュ形式で取得される
- 正規表現を対話的に検証できるサイト:Rubular
- ActiveRecord には多くのコールバックメソッドが存在する
- 多重代入:
name = his_name = "Taro"
まとめ
主に Rails のモデル、ActiveRecord の機能を解説する章だった。
ActiveRecord は Rails 固有のパッケージ名というか機能名というか、程度に考えていたので、一般のデザインパターンの具体実装だったという話は驚きがあった。
バリデーション、ユーザー認証処理、データ永続化手法としての RDB など一般の Web 開発として必要な知識も多く学べる。