Ruby on Rails チュートリアルの第6章のメモです。第6章では、MVCフレームワークのMことModelを中心に学びます!Webアプリケーションに必須なユーザモデルの生成やデータを保存する手段を学ぶことができます!
第6章 ユーザーのモデルを作成する | Rails チュートリアル
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つのペアの仮想的な属性(
password
とpassword_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のおすすめ書籍はこちら!