enum_helpを利用して列挙型のi18n対応を簡単に行う

はじめに

Railsでアプリケーションを開発する際に、enumを利用しないことはないと思います。そうなると必要になってくるのが、enumとして定義された値のi18n対応です。これをサクッと解決してくれるのが、enum_helpというgemです。

この手の「書こうと思えば書けるけれど、わざわざ書くのも面倒臭い」的な処理が、気づけばgemとして公開されているのが、ruby界隈の文化の素晴らしいところだと思います。ありがたく使わせて頂きましょう。

実装

インストールは以下の通りです。

gem install 'enum_help'

リポジトリを確認すると、一年ほど更新されておりません。READMEにはRails 4.1.0なる文字も目に入ります。ですが、Rails5.xでも普通に動きます。私の手元でも、これといって問題なく商用稼働しているので、当面は差し支えないと考えております。

利用の仕方は非常に簡単です。

以下の通り、対象のattributesに_i18nを付与するだけです。

irb(main):001:0> post = Post.first
Post Load (0.5ms) SELECT `posts`.* FROM `posts` ORDER BY `posts`.`id` ASC LIMIT 1
=> #
irb(main):002:0> post.status_i18n
=> "Draft"

また、上記を複数形にて利用することで、一覧を取得することができます。これはselect formのcollectionの入力として非常に便利です。

irb(main):003:0> Post.statuses_i18n
=> {"rejected"=>"Rejected", "draft"=>"Draft", "published"=>"Published", "other"=>"Other"}

尚、ransackを経由して利用する場合は、別途ransackのransackerオプションにて、symbolから数値への変換を行います。

これはMySQLに渡す検索クエリをenumの文字列表現から、データベース中で保存されている数値表現に変更する必要があるためです。

Rails

Posted by poison