🔢

【Rails】enumでvalueからkeyを取得する

2023/10/17に公開

はじめに

Railsでは、データベース内の列に対してenum(列挙型)を定義することができます。enumを使用すると、列の値を特定のシンボルにマッピングすることができます。
この記事では、enumを設定し、enumの値からキーを取得する方法について説明します。

enumの定義

まず、enumを使用するためには、モデル内でenumメソッドを使用して列挙型を定義する必要があります。以下は、例としてUserモデル内にenumを定義する方法です。

class User < ApplicationRecord
  enum status: [:active, :inactive, :pending]
end

上記の例では、Userモデルのstatus列挙型を定義しています。列挙型のキーはシンボルで表され、対応する値は0から始まる整数です。

列挙型の値からキーを取得する方法

enumを使用すると、列挙型の値からキーを取得するためのいくつかの方法があります。

keyメソッド

keyメソッドを使用すると、列挙型の値から対応するキーを取得できます。以下は、例としてUserモデルのstatus列挙型の値からキーを取得する方法です。

user = User.new(status: :active)
key = User.statuses.key(user.status)

上記の例では、Userモデルのstatus列挙型の値が:activeである場合、key変数には:activeが代入されます。

invertメソッド

invertメソッドを使用すると、列挙型のマッピングを逆にしたハッシュを取得できます。このハッシュを使用すると、値からキーを取得することができます。以下は、例としてUserモデルのstatus列挙型の値からキーを取得する方法です。

user = User.new(status: :active)
key = User.statuses.invert[user.status]

上記の例では、Userモデルのstatus列挙型の値が:activeである場合、key変数には:activeが代入されます。

まとめ

Railsでenumを使用して列挙型を定義し、enumの値からキーを取得する方法について説明しました。keyメソッドやinvertメソッドを使用することで、列挙型の値からキーを簡単に取得することができます。enumを活用して、コードの可読性を向上させるために列挙型を活用してみてください。

参考

https://api.rubyonrails.org/v5.1/classes/ActiveRecord/Enum.html
https://docs.ruby-lang.org/ja/latest/class/Hash.html#I_KEY
https://docs.ruby-lang.org/ja/latest/class/Hash.html#I_INVERT

Discussion