Rubyでenumを使いたい時

  • 85
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

C系言語でお馴染みのenumですが、Rubyにはenumがないので、moduleを使ってやっています。

enum定数の定義

基本的には定数を複数持ったモジュールを定義するだけです。

定数定義
module Status
  REQUEST = 1
  APPROVED = 2
  REJECTED = 3
end

enumの名前を使いたい場合

enum定数に対応する名前がある場合は、値と名前のハッシュを用意しておきます。

対応する名前
STATUS_NAME = {
  Status::REQUEST => 'リクエスト中',
  Status::APPROVED => '承認',
  Status::REJECTED => '拒否'
}
名前を返すメソッド
def status_text
  STATUS_NAME[self.status]
end

enumの値をまとめて配列で取得する

enumの値をまとめて配列で取得するためには、モジュールに以下のメソッドを追加します。

全enum値の取得メソッド
module Status
  def self.all
    self.constants.map{|name| self.const_get(name) }
  end
end

これで簡単にenum値の一覧が取れるようになりました。

statuses = Status.all