👋

Rails enum

2024/03/06に公開

Railsのenumについて理解しよう

Railsのenumは、特定のカラムに対して定義された一連の値に名前を付けるための便利な機能です。enumを使用することで、コードの可読性が向上し、値の管理がしやすくなります。

enumの定義方法

enumは、以下のようにモデルで定義します。

ruby class Model < ApplicationRecord enum column_name: { key1: value1, key2: value2, ... } end ​

例えば、Appointmentモデルのstatusカラムに対してenumを定義する場合は、次のように書きます。

ruby class Appointment < ApplicationRecord enum status: { pending: 0, approved: 1, rejected: 2 } end ​

enumを使用するメリット

enumを使用すると、以下のようなメリットがあります。

  1. 可読性の向上
  • 数値の代わりに意味のある文字列を使用できます。
  • appointment.status = 0 の代わりに appointment.status = :pending と書けます。
  1. メソッドの自動生成
  • 各キーに対応するクエリメソッド(例: pending?approved?rejected?)が自動的に定義されます。
  • appointment.pending? のように、現在の状態を確認できます。
  1. スコープの自動生成
  • 各キーに対応するスコープ(例: pendingapprovedrejected)が自動的に定義されます。
  • Appointment.pending のように、特定の状態のレコードを取得できます。
  1. バリデーションの簡略化
  • モデルのバリデーションで、enumで定義された値のみを許可するためのバリデーションが簡単に書けます。
  • validates :status, inclusion: { in: Appointment.statuses.keys }
  1. 国際化(I18n)のサポート
  • enumの各キーに対応する翻訳を定義することができます。

  • config/locales/en.yml で以下のように定義します。

    yaml en: activerecord: attributes: appointment: statuses: pending: "Pending" approved: "Approved" rejected: "Rejected" ​

まとめ

Railsのenumは、特定のカラムに対して定義された一連の値を管理する際に非常に便利な機能です。これにより、コードの可読性が向上し、バグが発生しにくくなります。enumを効果的に使用することで、Railsアプリケーションの開発と保守がより簡単になります。

Discussion