【Rails】enumをI18n対応させるenum_helpが便利すぎた
Railsでの開発を通して色々なgemを教えてもらったりして常に目から鱗状態という最近の事情です。
その中でenum_help
というenum
をI18n化するgemが個人的に簡単かつ便利だなーと思ったのでご紹介です!
まずenumとは何者か
enum
は0を男性, 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から導入された機能っぽい)
enumをI18n対応させたい!
user.gender
と書いて"male"や"female"とでるのは素敵だけど、日本語で"男性", "女性"と表示させたいと日本人の僕的には思うわけですよ…
ただ素の状態のenum
をI18n化するのは若干面倒くさそう…
そこででてくるのが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 => "女性"
これでenumのI18n化は完了なんです!
本当にgem入れて、locales設定するだけでenumのI18n化ができちゃうので簡単ですね!
おまけ
enum_help
を設定すると便利ヘルパーが付与される
# 設定しているenumをハッシュで展開 user.genders_i18n.invert => {"男性"=>"male", "女性"=>"female"}
ビューでselect_boxを設定する際などに重宝します!
もっといろんなgemとか覚えて、効率的にRails開発をできるように精進したい今日この頃。