ひよっこエンジニアの雑多な日記

なんとかWeb系のエンジニアをやっています。

【Rails】enumをI18n対応させるenum_helpが便利すぎた

Railsでの開発を通して色々なgemを教えてもらったりして常に目から鱗状態という最近の事情です。

その中でenum_helpというenumI18n化するgemが個人的に簡単かつ便利だなーと思ったのでご紹介です!

まずenumとは何者か

enum0を男性, 1を女性のように数字を何かしらの値と紐付けているようなデータの管理をしている場合に非常に有効なものです。

例えばUserモデルで性別をgenderで管理している場合に男性を0, 女性を1としていると想定

class User < ActiveRecord::Base
  enum gender: { male: 0, female: 1 }
end

このように書くと

# genderに0を設定している場合
user.gender
=> "male"

# genderに1を設定している場合
user.gender
=> "female"

こんな感じでgenderを数字ではなく、文字列で扱うことができるようになって直感的になるし、色々と便利ヘルパーが付加されるので、こんな感じのデータ構造を取っている際は積極的に設定するべき!(ただRails4.1から導入された機能っぽい)

enumI18n対応させたい!

user.genderと書いて"male"や"female"とでるのは素敵だけど、日本語で"男性", "女性"と表示させたいと日本人の僕的には思うわけですよ…
ただ素の状態のenumI18n化するのは若干面倒くさそう…

そこででてくるのがenum_helpという便利gemです!! 使い方も簡単でenum_helpを導入してlocalesを設定するだけ!

enum_helpを導入しよう!

1. まずは例のごとくGemfileに導入するgemを追記する

gem 'enum_help'

2. bundle install

3. localファイルに追記

config/locales/ja.yml

ja:
  enums:
    user:
      gender:
        male: 男性
        female: 女性

4. あとは呼び出すだけ!

呼び出すときはenumを設定している属性を呼び出す際に◯◯_i18nとするだけ!

# genderに0を設定している場合
user.gender_i18n
=> "男性"

# genderに1を設定している場合
user.gender_i18n
=> "女性"

これでenumI18n化は完了なんです!
本当にgem入れて、locales設定するだけでenumI18n化ができちゃうので簡単ですね!

おまけ

enum_helpを設定すると便利ヘルパーが付与される

# 設定しているenumをハッシュで展開
user.genders_i18n.invert
=> {"男性"=>"male", "女性"=>"female"}

ビューでselect_boxを設定する際などに重宝します!

もっといろんなgemとか覚えて、効率的にRails開発をできるように精進したい今日この頃。