Railsチュートリアル 2周目の学習アウトプットとして、要約記事を書いていきます。
本投稿は、「第6章 ユーザーのモデルを作成する」の中の、「6.1 Userモデル」の要約です。
第6章 ユーザーのモデルを作成する
6.1 Userモデル
・AR(Active Record)とは
データベースとやり取りをしてくれるRailsのライブラリ。
データベースとRubyは全く別言語の世界だが、データベースを扱う言語を知らなくてもARを使えばデータベースに対する処理が行える。
変数のようにデータベースに値を保存したり、データを作成・検索することができる。
・ユーザー登録ページを実装するためには、ユーザー名/メールアドレス/パスワードなどを保存しておくことが必要。
そのために作成するのが、Userモデル。
・nameとemailを持つユーザーを保存するためには、nameとemailのカラムを持つusersテーブルを作成する。
モデルの生成コマンドは下記。
$ rails generate model User name:string email:string
モデルを生成すると、
3つのマジックカラム
・id
・created_at(作成日時)
・updated_at(更新日時)
も自動で作成されるため、下記のデータモデルを持つusersテーブルが作成される。
カラム名 | 型 |
---|---|
id | integer |
name | string |
string | |
created_at | datetime |
updated_at | datetime |
・マイグレーションファイルを作成したら、下記コマンドを実行し、データベースに適用する。
$ rails db:migrate
・「DB Browser for SQLite」というツールを使うと、.sqlite3のようなバイナリ形式で書かれたデータベース用ファイルの中身を見ることができる。
Active Recordで使えるメソッドいろいろ
・newメソッド
新しいオブジェクトを作成する。
使用例)
>> user = User.new(name: "Takashi", email: "takashi@gmail.com")
→ name属性に"Takashi"、email属性に"takashi@gmail.com"が入ったuserオブジェクトが作成される。
・saveメソッド
メモリ上に作成したデータを、データベースに保存する。
使用例)
>> user.save
→ 先ほど作成したuserの中身が、データベースに保存される。
・createメソッド
オブジェクトの作成(new)〜データベースへの保存(save)をまとめて行ってくれる。
使用例)
>> User.create(name: "Youko", email: "youko@example.com")
→ name属性が"Youko"、email属性が"youko@example.com"のオブジェクトを作成し、データベースに保存する。
・destroyメソッド
createメソッドと逆で、データベース上の指定したデータを削除する。
使用例)
>> user.destroy
→ データベース上に保存した、userのデータが削除される。ただし、メモリ上のuserデータは残る。
・findメソッド
データベース上の情報をidで検索し、返す。
使用例)
>> User.find(1)
→ idが1のユーザ情報を返す。
・find_byメソッド
データベース上の情報をid以外で指定して検索し、返す。
使用例)
>> User.find_by(name: "Kenta")
→ usersテーブルの中から、name属性が"Kenta"と合致するものを探し、返す。
・firstメソッド
指定のテーブルの中で、1番目に保存されている情報を返す。
使用例)
>> User.first
→ usersテーブルの中で、1番目に保存されているユーザー情報を返す。
・allメソッド
データベース上の、指定したテーブルに保存された全てのデータを返す。
使用例)
>> User.all
→ usersテーブルの全てのデータを返す。
・update_attributesメソッド
データベースに保存されたデータの値を更新し、保存する。
※ただし、検証に1つでも失敗するとうまくいかない。パスワードが要求されるようになるとそれ以外の属性だけを指定して更新しようとしてもうまくいかないので、後述のupdate_attributeメソッドなどを使う。
使用例)
>> user.update_attributes(name: “Keita”, email: “keita@gmail.com” )
→ userオブジェクトを元にデータベースに保存されたデータについて、name属性を"Keita"、email属性を“keita@gmail.com”に更新する。
・update_attributeメソッド
検証を回避し、特定の属性のみを更新・保存する。
使用例)
>> user.update_attribute(:name, "Keita")
→ userオブジェクトを元にデータベースに保存されたデータについて、name属性が"Keita"に更新・保存される。
・reloadメソッド
データベースの値に合わせて値を更新する。
使用例)
user.reload.email
→ データベース上のemail属性の値に合わせて、userデータのemail属性を更新する。