他の言語のenumと違って、モデル名.enum要素名
という作りになってしまうが故のつらいポイントを書いてみた。
環境
rails (5.2.0)
要素名で気をつけたいところ
端的な名前
enumの要素名は 要素名?
が作られてしまう。それが故に安易な名前付けは機能としてぼやけやすいので気をつけること。
例
ユーザの性別を持つ sex
カラムがあり、それをenumで管理するとする。(ちなみにenumの参考URL)
class User < ApplicationRecord enum sex: { not_known: 0, man: 1, woman: 2, not_applicable: 9, } end
こうモデルを指定したときに男性であるかを判定したいときは
user = User.first
user.man?
のように直感的にかける、しかしながら、性別が不明のものかを判定する場合は
user.not_known?
という記述になり、一見すると「知らないユーザ」のようにも読み取れる。
そのため、この場合は
class User < ApplicationRecord enum sex: { sex_not_known: 0, man: 1, woman: 2, } end
とすると分別しやすくなるはず。
汎用的な要素名は避ける
名前かぶりが許されないので初期値のようなものを設定するときは、個々でユニークなるような記述が良い。
例
ユーザーが普通の人か、特別な人かを分けるカラムをcategoryとして設定する場合。
class User < ApplicationRecord enum category: { default: 0, normal: 1, special: 2, } end
こうした場合、defaultが使われてしまうので、このあと初期値が必要なenumが出てきた場合にdefaultが使えなくなってしまう。
そのため、こういう場合は
class User < ApplicationRecord enum category: { not_set_category: 0, normal: 1, special: 2, } end
というほうがわかりやすく、管理しやすい。