Rubyと筋肉とギターとわたし

筋トレが仕事です

【Rails】enumからi18nを適応したhashを取得したいとき

どうもてぃです。

enumについてあんまり理解してなかったのでメモとして残します。

gemのenum_helpを入れている状態です。

環境

% lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description:    Linux Mint 19.3 Tricia
Release:    19.3
Codename:   tricia

TL; DR

User model

class User < ApplicationRecord
  enum role: { admin: 0, manage: 1, guest: 2 }


・
・
・
end

locales/js.yml

ja:
  enums:
    user:
      role:
        admin: 管理者
        manage: マネージャー
        guest: 一般
・
・
・

コンソール

pry(main)> User.roles
=> {"admin" => 0, "manage" => 1, "guest" => 2}

pry(main)> User.roles_i18n
=> {"admin" => "管理者", "manage" => "マネージャー", "guest" => "一般"}

終わり

Userのインスタンスから取得することもできますが、今回はインスタンスを生成せずにenumを使いたかったので、i18nを試してみたらいけました。

User.roles_i18n.invertとすればselect_boxとかに使えそうですね。