RubyでEnumを使いたかったらenumerize
追記)この記事古いので、Rail4.1以上を使う場合は、ActiveRecord::Enum使ったほうがいいと思います。
https://github.com/brainspec/enumerize
結論からいうと、これはいいです。
例えば職業や性別なんかのDBで管理するほどのもんじゃないものはコレで扱うといい。
Gemfile
gem "enumerize", "~> 0.7.0"
models/user.rb
class User < ActiveRecord::Base extend Enumerize enumerize :sex, in: %w(male female)
とりあえず、おおっ、と思ったのはこれだけでsexに対するinclusionのバリデーションがかかるのだ。
で、i18nと組み合わせるとvalueとのマッピングが柔軟になる。
locales/models/user/ja.yml
ja: enumerize: user: sex: male: 男 female: 女
ただ、viewの素のformで使うとき、selectはさらっとかけるのにradio buttonはさらっといけなかった。
simple_formと合わせて使うとさらっといけるようだけども。
# selectの場合 <%= f.select :sex, User.sex.options %> # radio buttonの場合 <%= f.radio_button :sex, :male %><%= t('enumerize.user.sex.male') %> <%= f.radio_button :sex, :female %><%= t('enumerize.user.sex.female') %>
あとホントは、以下のように使えればほんと最高なんだけど、それはできなかった。
User.sex.male => :male User.sex.male.value => 男
でもi18n-jsを入れておけば、JS側でも使えるし。
console.log I18n.t("enumerize.user.sex.male") #=> 男
※ほんとはもうちょっと手順がいる。詳細は→http://d.hatena.ne.jp/ria10/20130304/1362383794
これはもっと早く使っていればよかった。