【Rails5】Enumを’enum_help’を使ってi18n対応する

Rails 4.1からActiveRecordでenumが扱えるようになったので、Gemを追加することなく、enumが使えるようになっています。enum型あるいは列挙型は、カラムの値が固定値の場合に、値を文字列として扱うことができるので、効率よくデータを格納したり検索できるようになります。今回はinteger型と、boolean型を列挙型にして、enum_helpというGemを利用して多言語対応していきます。さらにsimple_formと合わせることで、viewsを簡素化することができます。

EnumHelp
https://github.com/zmbacker/enum_help
SimpleForm
https://github.com/plataformatec/simple_form

環境はこちらです

準備

必要なgemはこちらです。

$ bundle します。

simple_form を使う場合は次のコマンドでインストールします。

列挙型にする対象のカラムを生成します。

カラムにデフォルト値を入れておきます。

db/migrate/20xxxxxxxxx_add_age_to_users.rb

$ rails db:migrate します。

モデル

integer値とboolean値にそれぞれ、文字列を指定します。age_privateとしているのは、privateのみだと、他のメソッドでも使う可能性があるので、多重定義でエラーにならないためにユニークなメソッド名にしています。名前は重複しないように注意が必要です。

app/models/user.rb

ロケール

localファイルにenums以下を記述します。

config/locales/ja.yml

ビュー

simple_formを使っている場合のviewsはこのようになります。ちなみにinclude_blankはセレクトメニューの先頭に文字を入れることができます。

_form.html.erb

viewsで値を受け取る時は_i18nを付与します。

show.html.erb

コンソールで確認

コンソールで見ると文字列として格納されているのが確認できます。

これで可読性も向上しますし、文字列なので検索しやすくなります。
今回は以上です!ご覧いただき、ありがとうございました!!☺️


投稿者:

Shuji

読書したり、プログラミングしたりしています。何かアウトプットできそうなものがあれば投稿していきたいと思います。