【Rails】ActiveRecordの特徴やメソッドについて網羅的に解説!

Rails

ActiveRecordとは?何者?

ActiveRecordはRuby on Railsフレームワークにおけるオブジェクト・リレーショナル・マッピング(ORM)のライブラリです。

つまり、データベースに保存されたデータをRubyのオブジェクトにマッピングし、操作を行うためのライブラリです。

ActiveRecordは、データベースに保存されたデータをRubyのクラスのインスタンスとして扱うことができるようにするための、ActiveRecordパターンと呼ばれるアーキテクチャを採用しています。

ActiveRecordパターンでは、各データベーステーブルは対応するRubyクラスに対応し、各テーブルに格納されているデータは、それぞれのクラスのインスタンスに対応します。

ActiveRecordでは、データベースの操作を行うためのメソッドが提供されており、Rubyのオブジェクトとしてデータベースに保存されているデータを操作することができます。

  • find: レコードを検索して取得
  • where: 条件を指定してレコードを取得
  • create: レコードを新規作成
  • update: レコードを更新
  • destroy: レコードを削除
  • save: レコードを保存

ActiveRecordは、データベースにアクセスする際のSQLの生成を自動的に行うため、開発者にとってSQLを扱うことなく、データベースの操作を行うことができるようになります。

また、ActiveRecordはActiveRecordのモデルに対して、バリデーションやコールバック、アソシエーションなどのフレームワーク機能を提供し、開発者がアプリケーションを開発する際に便利な機能を提供します。

ActiveRecordは、Ruby on Railsには標準搭載されており、Railsアプリケーション開発において、データベースアクセスのための基本的なメソッドを有しています。

以下でActiveRecordのメソッドについて深掘りしていきましょう。

ActiveRecordにはどんな種類のメソッドが存在するのか?

ActiveRecordはRailsのORMであり、データベースとRailsのモデルクラスを紐付ける役割を担います。

そのため、ActiveRecordには主に以下のような種類のメソッドが存在します。

1CRUD(Create, Read, Update, Delete)関連のメソッドデータベースに対して、新規作成、取得、更新、削除の操作を行うためのメソッドです。
2クエリ関連のメソッドデータベースから特定の条件でデータを取得するためのメソッドです。
例えば、whereorderlimitなど。
3バリデーション関連のメソッドエンティティの妥当性をチェックするためのメソッドです。
例えば、valid?errorsなど。
4エンティティ関連のメソッドエンティティの操作や管理に関するメソッドです。
例えば、attributesattribute_names
5コールバック関連のメソッドエンティティのライフサイクルイベントに対して、特定の処理を行うためのメソッドです。
例えば、before_saveafter_createなど。
6アソシエーション関連のメソッドエンティティ間の関連を管理するためのメソッドです。
例えば、has_manybelongs_toなど。
7マイグレーション関連のメソッドデータベーススキーマの変更を管理するためのメソッドです。
例えば、create_tableadd_columnなど。

上から順に種類ごとにActiveRecordのメソッドを紹介しますね。

ActiveRecordのCRUD(Create, Read, Update, Delete)関連のメソッド

ActiveRecordのCRUD(Create, Read, Update, Delete)関連のメソッドには、以下のメソッドが含まれます。

  • create: 新しいレコードを作成します。
  • create!: 新しいレコードを作成し、保存時に失敗した場合は例外を発生させます
  • new: 新しいレコードを作成するためのオブジェクトを返します。
  • find: 主キーで指定されたレコードを取得します。
  • find_by: 条件に合った最初のレコードを取得します。
  • find_by!: 条件に合った最初のレコードを取得し、存在しなかった場合は例外を発生させます
  • first: テーブル内の最初のレコードを取得します。
  • last: テーブル内の最後のレコードを取得します。
  • all: テーブル内の全レコードを取得します。
  • where: 条件に合ったレコードを取得します。
  • order: レコードをソートします。
  • limit: 取得するレコード数を制限します。
  • offset: 取得するレコードのオフセットを指定します。
  • update: 既存のレコードを更新します。
  • update_all: 条件に合った全レコードを更新します。
  • destroy: レコードを削除します。
  • destroy_all: 条件に合った全レコードを削除します。
  • save: レコードを保存します。
  • save!: レコードを保存し、失敗した場合は例外を発生させます

ActiveRecordのクエリ関連のメソッド

ActiveRecordのクエリ関連のメソッドには、以下のようなものがあります。

  • select : 指定したカラムのみを取得
  • group : グループ化条件を指定します
  • having: GROUP BY の結果に対して条件を指定します
  • joins : JOIN 文を指定します
  • left_outer_joins: LEFT OUTER JOINを指定
  • where: 条件を指定し、取得します
  • or: or条件を指定
  • not : NOT条件を指定
  • and : AND条件を指定
  • distinct : DISTINCT句を指定
  • order: ORDER句を指定
  • reverse_order : ORDER句を逆順に指定
  • limit: LIMIT句を指定
  • offset: OFFSET句を指定
  • lock : ロック条件を指定
  • readonly: 取得結果を読み取り専用にする
  • from: FROM句を指定
  • pluck : 指定したカラムの値のみを取得
  • unscope : スコープから条件を除外
  • find_or_create_by: 指定条件のレコードを検索し、見つからなかった場合には新しく作成
  • find_or_initialize_by : 指定条件のレコードを検索し、見つからなかった場合には新しいインスタンスを返す

ActiveRecordのバリデーション関連のメソッド

ActiveRecordのバリデーション関連のメソッドには、以下のようなものがあります。

  • valid?: レコードが妥当かどうかをチェックします。
  • invalid?: レコードが不妥当かどうかをチェックします。
  • validate: レコードをバリデーションします。
  • validate!: レコードをバリデーションし、失敗した場合は例外を発生させます。
  • errors: レコードのエラーメッセージを格納したオブジェクトを返します。
  • errors.full_messages: レコードのエラーメッセージを文字列の配列で返します。
  • errors.add: エラーメッセージを追加します
  • errors.clear: エラーメッセージをクリアします
  • errors.delete: 指定した属性のエラーメッセージを削除します
  • errors.empty?: エラーメッセージが空かどうかを返します

これらは、各アトリビュートに対して、必須項目かどうか、最大長、最小長、正規表現などの条件を設定できます。

ActiveRecordのエンティティ関連のメソッド

ActiveRecordのエンティティ関連のメソッドには、以下のようなものがあります。

  • attributes: エンティティのアトリビュートのハッシュを返します。
  • attribute_names: エンティティのアトリビュート名の配列を返します。
  • attribute_present?: 指定したアトリビュートが存在しているかどうかを返します。
  • assign_attributes: 複数のアトリビュートを一度に割り当てます。
  • read_attribute: 指定したアトリビュートの値を返します。
  • write_attribute: 指定したアトリビュートに値を設定します。
  • update: エンティティをデータベースに保存します。
  • update_attribute: エンティティの指定したアトリビュートを更新します。
  • update_attributes: エンティティの複数のアトリビュートを更新します。
  • update_attributes!: エンティティの複数のアトリビュートを更新し、保存時に失敗した場合は例外を発生させます
  • increment!: エンティティのアトリビュートをインクリメントします。
  • decrement!: エンティティのアトリビュートをデクリメントします。
  • toggle!: エンティティのアトリビュートのブール値を反転します
  • reload: エンティティをデータベースから再取得します。
  • touch: エンティティのupdated_atアトリビュートを現在時刻に更新します

ActiveRecordのコールバック関連のメソッド

ActiveRecordのコールバック関連のメソッドには、以下のようなものがあります。

  • before_validation : バリデーションの前に呼び出されます
  • after_validation : バリデーションの後に呼び出されます
  • before_validation_on_create : create時のバリデーションの前に呼び出されます
  • after_validation_on_create : create時のバリデーションの後に呼び出されます
  • before_validation_on_update : update時のバリデーションの前に呼び出されます
  • after_validation_on_update : update時のバリデーションの後に呼び出されます
  • before_save : 保存前に呼び出されます
  • around_save : 保存前後に呼び出されます
  • before_create : create時に呼び出されます
  • around_create : create時の前後に呼び出されます
  • after_create : create後に呼び出されます
  • before_update : update時に呼び出されます
  • around_update : update時の前後に呼び出されます
  • after_update : update後に呼び出されます
  • before_destroy : destroy時に呼び出されます
  • around_destroy : destroy時の前後に呼び出されます
  • after_destroy : destroy後に呼び出されます
  • after_commit : コミット後に呼び出されます
  • after_rollback : ロールバック後に呼び出されます

これらのコールバックメソッドは、ActiveRecord::Base クラスの中で定義されており、モデルクラスで使用する際は、それぞれのメソッドをオーバーライドすることで、自分自身が定義した処理を行うことができます。

ActiveRecordのアソシエーション関連のメソッド

ActiveRecordのアソシエーション関連のメソッドには、以下のようなものがあります。

  • belongs_to : 1対1の関連を定義します
  • has_one : 1対1の関連を定義します
  • has_many : 1対多の関連を定義します
  • has_many :through : 関連テーブルを介した1対多の関連を定義します
  • has_one :through : 関連テーブルを介した1対1の関連を定義します
  • has_and_belongs_to_many : 多対多の関連を定義します
  • accepts_nested_attributes_for : ネストした属性を受け入れるアソシエーションを指定します
  • dependent: 関連付けられたオブジェクトの破棄方法を指定します
  • counter_cache: カウンターキャッシュを使用するためのオプションを指定します
  • primary_key: 主キーを指定します
  • inverse_of: 反対側の関連を指定します
  • autosave : 自動保存を有効にします

これらのメソッドは、ActiveRecordのModelクラスによって使用可能であり、モデルクラスに対して使用することで、関連付けられたオブジェクトとのやり取りを簡単にすることができます。

ActiveRecordのマイグレーション関連のメソッド

ActiveRecordのマイグレーション関連のメソッドには、以下のようなものがあります。

  • create_table : テーブルを作成します
  • drop_table : テーブルを削除します
  • change : テーブルのスキーマを変更します
  • rename_table : テーブル名を変更します
  • add_column : カラムを追加します
  • remove_column : カラムを削除します
  • rename_column : カラム名を変更します
  • change_column : カラムの設定を変更します
  • add_index : インデックスを追加します
  • remove_index : インデックスを削除します
  • execute : SQLを実行します

これらのメソッドは、ActiveRecord::Migrationクラスによって使用可能であり、マイグレーションスクリプト内で使用することで、データベーススキーマを変更することができます。

また、Railsにはrakeタスクとして、マイグレーションの作成、実行、ロールバックなどを行うことができる機能があります。

タイトルとURLをコピーしました