rails-tutorial6章前編アウトプット
・モデルって主にどんな役割があるの?
コントローラから受け取った命令に対して、データベースへアクセスして情報を取得したり、
また新たに情報をデータベースに
書き込んだりする
※だけどデータベースはrailsは全く違うもの、railsが日本人だとすればデータベースは外国人、
当然使われる言語が全然違う!!
よってモデルの指示をデータベースに分かりやすく通訳してくれる役割の人や便利な機能が必要
→ それがActive Record!!
・データベースにテーブルを追加する時に使うのが、マイグレーションという仕組み
データベースのスキーマへの変更をrubyのコードで実現できる
rails db:migrate でデータベースの変更を実行
rails db:rollback でデータベースの状態を一つ前の状態に戻すことができる
(マイグレーションファイルが1つのバージョンとして扱われている)
・findメソッドとfind_byメソッドの違い
find ... idをキーとしてデータを取得(id以外は取得不可
対応するデータがない場合ActiveRecord::RecordNotFound(エラー)を返す
find_by ... id以外の情報でもデータを取得できる
返ってくるデータは最初にヒットした1件のみ
該当するデータがない場合はnilが返ってくる
・Validation(検証)とは?
Active Recordが持つ機能、モデルで追加されるデータの存在性(空であるか)、長さは適切であるか、
一意性であるか などをチェックしてくれる仕組み
基本的な流れは「モデルオブジェクトをデータベースに登録や更新する前に検証を行い、エラーがあれば、
登録、更新しない で差し戻す」
上記の仕組みに対応するのがsaveメソッド、登録、更新前に検証してエラーが発生すればfalseを返す
save!メソッドは検証エラーがあった場合falseではなく例外を発生させるメソッド
・メールアドレスが適切であるか(フォーマット)の検証
formatオプションを使う ex) validates :email, format: { with:
このオプションは引数に正規表現(Regular Expression)をとる
この正規表現難しいのでよく使われる形で
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/I
というのがある
ただ、これだと..の連続のドットに対応できないらしい、よってそれすら対応したのがこれ
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/I
僕は脳死でこれをコピp...なんでもないです
・一意性の検証
uniquness: trueオプションを使う、 ただし、メールアドレスの場合大文字小文字は区別しないので
大文字小文字を区別しない一意性の検証ができると良い、その場合
uniqueness: { case_sensitive: false }とcase_sensitive: falseオプションを使う
些細なこと(case_sensitive)は気にしない(false)、一意性の設定みたいな感じ
・インデックスって?
モデルでデータのカラム検証をしたりするが、もうちょっとデータの検証に保証が欲しいとか+α何か欲しいときに
使われる
データベースをほんの一部分だけ変更するので
rails generate migration add_index_to_users_email とmigrationを新たに作成
ファイル名はどこのテーブルのどのカラムへみたいに記述すると良い