🚀

Active Record の全体像を理解しよう

2023/06/18に公開

はじめに

 こんにちは!今回はActive Record の全体像についてのブログを書きました!

以下の内容をそれぞれ概要がわかるように簡単に説明します。

  1. Active Record の基礎
  2. Active Record マイグレーション
  3. Active Record バリデーション
  4. Active Record コールバック
  5. Active Record の関連付け
  6. Active Record クエリインターフェイス

Active Record

Active Record とは?

 Active RecordはRuby on RailsのORM(Object-Relational Mapping)ライブラリで、アプリケーションとデータベース間のコミュニケーションを抽象化します。
 これにより、Rubyのコードを使ってデータベースのレコードを操作することができます。

1. Active Record の役割

Active Recordは、以下の主な役割を持ちます。

  • モデル間の関連性(アソシエーション)を表現する
  • データの検証(バリデーション)を行う
  • データベース操作を抽象化する

 Active Recordのモデルは通常、アプリケーションの各データベーステーブルに対応します。
 例えば、User というモデルを作成すると、Active Recordは users というテーブルとそれを結びつけます。

class User < ActiveRecord::Base
end

 Active Recordを通じて、データベースから読み取ったレコードをRubyオブジェクトとして操作したり、オブジェクトの状態をデータベースに保存(永続化)したりできます。

2. Active Record マイグレーション

 マイグレーションとは、データベースのスキーマを変更するための命令を定義したものです。
 Active Recordのマイグレーションを使用すれば、データベースのテーブル作成やカラムの追加・削除などをRubyのコードで記述することができます。

 以下に、users テーブルを作成するためのマイグレーションの例を示します。

class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

 このマイグレーションは、nameemail という文字列型のカラムを持つ users テーブルを作成します。
t.timestamps は、自動的に created_atupdated_at という2つの日付・時刻型のカラムを追加します。

3. Active Record バリデーション

 バリデーションは、データがデータベースに保存される前にそのデータが正しい状態であることを確認するためのものです。
 Active Recordは、モデルレベルでバリデーションを定義する機能を提供します。

 例えば、User モデルで、 nameemail が必ず存在するようにバリデーションを設定できます。

class User < ApplicationRecord
  validates :name, presence: true
  validates :email, presence: true
end

 これにより、nameemail が空の状態でユーザーを保存しようとするとエラーが発生します。

4. Active Record コールバック

 コールバックは、オブジェクトのライフサイクル(作成、更新、削除など)の特定の時点で実行されるメソッドです。
 Active Recordでは、モデルオブジェクトのライフサイクルの各段階でコールバックを定義できます。

 例えば、以下のコードでは、ユーザーが保存される前にそのメールアドレスを小文字に変換するコールバックを定義しています。

class User < ApplicationRecord
  before_save :downcase_email

  private

  def downcase_email
    self.email = email.downcase
  end
end

5. Active Record の関連付け

 Active Recordの関連付け(アソシエーション)は、モデル間の関連性を表現するためのものです。
 一つのモデルが他のモデルを参照する方法を定義することで、データベースの関連テーブル間の操作を簡単に行うことができます。

 例えば、一人のユーザーが複数のブログ投稿を持つ場合、User モデルと Post モデル間で一対多の関連付けを定義できます。

class User < ApplicationRecord
  has_many :posts
end

class Post < ApplicationRecord
  belongs_to :user
end

6. Active Record クエリインターフェイス

 Active Recordのクエリインターフェイスは、データベースからデータを読み取るための強力なツールです。
 Active Recordを通じてクエリを作成すると、そのクエリは自動的に適切なSQLに変換され、データベースからのレスポンスはRubyオブジェクトに変換されます。

 例えば、以下のコードは、全てのユーザーを取得するクエリを作成します。

users = User.all

 また、以下のコードは、名前が 'Alice' であるユーザーを探すクエリを作成します。

alice = User.find_by(name: 'Alice')

さいごに

 Active Recordの全体像について説明しました。データベース操作の抽象化、モデル間の関連性の表現、データの検証、データベースのスキーマ管理といった役割を担っており、Ruby on Railsでのデータ管理を非常に便利にしてくれます。

 これらの機能を活用して、ポートフォリオ作成など効率的なアプリケーション開発を進めていきましょう。

Discussion