tnkzw.sake

HomeSeriesTagsAbout

Rails Tutorialで学べることメモ-第6章-

Series
Railsチュートリアル

Rails Tutorial を改めてしっかりやり直してのメモ第 6 章編

https://railstutorial.jp/chapters/modeling_users?version=7.0https://railstutorial.jp/chapters/modeling_users?version=7.0

主要機能

has_secure_password

モデルにこのメソッドを追加すると、セキュアなパスワード機能が実装される。

  • ハッシュ化したパスワードを DB のpassword_digestに保存する
  • DB にはない仮想の属性passwordpassword_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 開発として必要な知識も多く学べる。