目的
- Rails4のActive Recordを知る
- 検索、バリデーションの理解が薄いので理解しなおす
Active Record : デザインパターンの一種
オブジェクトとは永続的なデータであり、そのデータに対する振る舞いでもあります。 Active Recordでは、データアクセスのロジックを確実なものにすることは、 そのオブジェクトの利用者にデータベースへの読み書き方法を教育することの一部である、 という意見を採用しています。
そういやそうだった
ORMフレームワークとしてのActive Record
ORM : オブジェクトリレーショナルマッピング
アプリケーションが持つリッチなオブジェクトを リレーショナルデータベース(RDBMS)のテーブルに接続するものです
- モデルおよびモデル内のデータを表現する
- モデル間の関連付け(アソシエーション)を表現する
- 関連するモデルを介した継承階層を表現する
- データがデータベースに永続的に保存される前に検証(validation)を行なう
- オブジェクト指向の表記方法でデータベースを操作する
命名ルール
- データベースのテーブル : 複数形であり、語はアンダースコアで区切られる (例: book_clubs)
- モデルのクラス : 単数形であり、語頭を大文字にする (例: BookClub)
スキーマのルール
- 外部キー :
#{テーブル名の単数形}_id
- 主キー : デフォルトでは
id
(自動的に追加される)
Active Record に予約されているカラム
- created_at : レコードが作成された時に現在の日付時刻が自動的に設定されます
- updated_at : レコードが更新されたときに現在の日付時刻が自動的に設定されます
- lock_version : モデルにoptimistic lockingを追加します
- type : モデルでSingle Table Inheritanceを使用する場合に指定します
- 関連付け名_type : ポリモーフィック関連付けの種類を保存します
- テーブル名_count : 関連付けにおいて、所属しているオブジェクトの数をキャッシュするのに使用されます
CRUD
Create, Read, Update, Delete
Create
user = User.create(name: "David", occupation: "Code Artist")
new を使う場合、#save を実行しないとDBに保存されない
user = User.new user.name = "David" user.occupation = "Code Artist" user.save
ブロック
user = User.new do |user| user.name = "David" user.occupation = "Code Artist" end
Read
あとで
Update
user.name = 'Dave' user.save
user.update(name: 'Dave')
一括更新
User.update_all "max_login_attempts = 3, must_change_password = 'true'"o
Delete
user.destroy
delete は、ActiveRecordを介さず削除を行う 処理が早いがコールバックなどは呼ばれない
マイグレーション
あとで