Railsのenumで定義したシンボルを元に文字列を返すメソッドを定義する

こんにちは!kossyです!




さて、今回はRailsenumで定義したシンボルを元に文字列を返すメソッドを定義したいと思います。
enumの詳しい説明は割愛します。



実装方法

class User

  enum role: [:general, :admin]

end

Userクラスがroleというカラムを持っていて、値をenumで管理している例です。

この場合、view側に「一般ユーザー」または「管理者」という表示をしたいという要望が出た場合、どう実装すればいいでしょうか。

app/views/users/show.html.haml

  = current_user.role == :general ? '一般ユーザー' : '管理者'

みたいな感じでしょうか。
これでもいいかと思いますが、enumのシンボルの値を4,5つと定義した場合は、実装がややこしくなります。


そこで、

class Item

  enum status: [:not_ordered, :ordered, :pick_up, :delevered, :unknown]

  def status_str
    { not_ordered: '未発注', ordered: '発注済', pick_up: '配達中', delevered: '配達済み', unknown: '未確認' }[status.to_sym]
  end

end

こうすれば、

@item.status_str # @item.status == :ordered

=> 発注済

のように、文字列を取り出すことができます。