Ruby on Rails

【Ruby on Rails】チュートリアル 「第6章 ユーザのモデルを作成する」をやってみた

Ruby on Rails チュートリアルの第6章のメモです。第6章では、MVCフレームワークのMことModelを中心に学びます!Webアプリケーションに必須なユーザモデルの生成やデータを保存する手段を学ぶことができます!

第6章 ユーザーのモデルを作成する | Rails チュートリアル

Railsチュートリアル第6章をやってみた

RailsのM(モデル)

Railsでは、データモデルで使用するデフォルトのデータ構造をモデルと呼ぶ
MVCフレームワークのMにあたる部分
データを永続化するために、Railsはデータベースを使用して長期間保存する
RailsはActive Recordと呼ばれるライブラリを利用してデータベースとやりとりする

Railsでのモデル生成

rails generateコマンドを叩く

rails generate model User name:string email:string

コントローラは複数形、モデルは単数形
マイグレーションファイルが生成される
マイグレーションとはデータベースの構造をインクリメンタルに変更する手段
t.timestampsコマンドは特別なコマンド
created_atとupdated_atという2つの「マジックカラム」を作成
マイグレーションを実行するにはrakeコマンド

bundle exec rake db:migrate

マイグレーションは取り消すこともできる

bundle exec rake db:rollback

モデルクラスはActiveRecord::Baseを継承する

データベースを変更せずコンソールでいじる

rails console --sandbox

サンドボックスモードの場合、すべてのコミットはコンソール終了時にロールバックされる

モデルのテスト

test/models/モデル名_test.rbに書く

bundle exec rake test:models

バリデーションはモデルに記載していく
emailのユニークテストは大文字・小文字を区別しない点を注意

メールアドレスの実用的かつ堅牢な正規表現

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

実は、ドットの連続とかを検知できない
演習問題で解決するとのこと

データの一意性を保つための注意点

RailsなどのWebアプリケーションではsubmitの連打などで意図せずレコードが重複してしまう可能性がある
Railsの設定で一意性の検証が行われているのにもかかわらず、起きてしまう場合がある
この場合は、データベース側にも一意性を保つための設定が必要
解決策としてデータベースにindexを追加する方法がある
Railsではマイグレーションでインデックスを追加することができる

rails generate migration add_index_to_users_email

db/migrate/[timestamp]_add_index_to_uesrs_email.rbファイルを編集して、
メールアドレスの一意性を強制するためにemailのインデックスにuniqueを付ける
最後に、

bundle exec rake db:migrate

を叩く

セキュアなパスワード

Railsのセキュアなパスワードの実装

has_secure_password

というRailsのメッソドを呼び出すだけでほぼ完成
ただし、モデルにpassword_digestという属性を作る必要がある
また、最先端のハッシュ関数bcryptをGemfileでインクルードする

次の機能が使えるようになる

  • セキュアにハッシュ化したパスワードを、データベース内のpassword_digestという属性に保存
  • 2つのペアの仮想的な属性(passwordpassword_confirmation)が使えるように
  • authenticateメソッドが使えるように

Ruby on Rails チュートリアル 「第6章 ユーザのモデルを作成する」のまとめ

  • マイグレーションを使うことで、アプリケーションのデータモデルを修正できる
  • Active Recordを使うと、データも得るを作成したり操作するための多くのメソッドを使えるようになる
  • データベースにインデックスを追加すると検索効率が上がり、また、データベースレベルでの一意性を保証することもできる
  • has_secure_passwordメソッドを使うことで、モデルに対してセキュアなパスワードを追加できる

第6章は1.5時間ぐらいかかった
Ruby on Rails チュートリアル 第6章までかかった合計時間は8.5時間

続きの記事はこちら!
Ruby on Rails チュートリアル 「第7章 ユーザ登録」をやってみた

Ruby on Railsのおすすめ書籍はこちら!


-Ruby on Rails