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