モデルのenumについて
そもそもenumとは
enumとは、1つのカラムに指定した複数個の定数を保存できる様にする為のモノ
- 指定した複数個の定数以外の値は保存できない
- カラムに指定した定数が入っているレコードを取り出すのが容易に
- データベースには整数値として保存
- アプリケーション内ではシンボルや文字列として扱われる
- 状態に応じたメソッドを自動生成してくれる
enumを使用すると嬉しいこと
コードの可読性と意図の明確化
enumを使うことで、状態やオプションを整数値ではなく、意味のある名前(シンボルや文字列)で表現できます。これにより、コードの可読性が向上し、他のエンジニアがコードを理解しやすくなります。
エラーの減少
整数値を直接使用する代わりにenumを使うことで、誤った値を割り当てるリスクを減らすことができます。これにより、データの整合性を維持しやすくなります。
メソッドの自動生成
Railsのenumは、状態に応じたメソッド(login?, logout!など)を自動的に生成します。これにより、状態のチェックや更新を簡単かつ一貫性のある方法で行うことができます。
スコープの自動生成
enumは各値に対してスコープを自動的に生成します。これにより、特定の状態のレコードを簡単にクエリできます(例:User.login)。
保守性の向上
状態の追加や変更が必要になった場合、enumを使用すると、一箇所の変更で済みます。これにより、将来の変更や拡張が容易になります。
バグの早期発見
enumは存在しない値を設定しようとするとエラーを発生させるため、誤った値の使用を早期に検出することができます。
確認メソッド インスタンス.定数名?
- 今enumカラムに入っている定数が何なのか確認できる
user.status
=> login
user.logout?
=> false
user.login?
=> true
更新メソッド インスタンス.定数名!
- 今enumカラムに入ってある定数を別の定数に更新するメソッド
user.status
=> login
user.logout!
=> logout
検索メソッド モデルクラス.定数名
- データを検索するメソッド
- 下記の場合、login状態のユーザーをすべて取得している
a_type_users = User.login
SELECT `users`.* FROM `users` WHERE `users`.`status` = 0