kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

Railsガイド Active Record の基礎

Active Record の基礎 | Rails ガイド

目的

  • 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を介さず削除を行う 処理が早いがコールバックなどは呼ばれない

マイグレーション

あとで