コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsのenumの要素名で気をつけたいところ

他の言語の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

というほうがわかりやすく、管理しやすい。

関連リンク