enumとlocaleの連携

2021-02-26

rails, enum

マスターテーブル作るほどではない固定の列挙型を使うことがよくある。
localeに定義しておくと使い勝手が良い気がしたので書いとく。

localeの使い方は全部ココ に書いてあるんですが

config/application.rb

1
    config.i18n.default_locale = :ja
1
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]

config/locales/ja/enum.yml

1
2
3
4
5
6
7
8
9
10
ja:
  enum:
    values:
      state:
        enabled: 1
        disabled: 0
    labels:
      state:
        enabled: 有効
        disabled: 無効

app/models/xxx.rb

1
enum satte: I18n.t('enum.values.state'), _prefix: true

デコレータとかにこんなの置いといて使う

1
2
3
def label(column, key)
  I18n.t("enum.labels").dig(column.to_sym, key.to_sym)
end

とすると使い回せて諸々ブレなくてレビューもしやすくていいんじゃないかなー?

複数のモデルで同じ内容のenumを個別に定義している実装を見て、どうにかできんかなーと考えてて思った

コメント

投稿する

投稿したコメントはご自身で削除できません

不適切なコメントと判断した場合は管理側で削除することがあります