【Rails】Enum - EnumerizeとActiveRecord::Enum
Rails(正確にはActiveRecord)のバージョンによって選択肢が変わってくる
ActiveRecord 4.1未満
Enumerize gemが便利.
gem 'enumerize'
class User < ActiveRecord::Base extend Enumerize enumerize :role, in: %i(user admin), default: :user end
ActiveRecord 4.1以降
ActiveRecord::Enum
が登場.
class User < ActiveRecord::Base enum role: %i(user admin) end
デフォルト値はmigration時に指定.
create_table :users do |t| t.column :role, :integer, default: 0 end
ただ,配列で指定しちゃうと変更が発生した時に危険なので,Hash
で格納する値を決めておく.
class User < ActiveRecord::Base enum role: { user: 10, admin: 0 } end
比較
- Enumerizeはi18nにも対応
- 述語メソッド(e.g.
user.admin?
)はどっちも使える - 破壊的変更(e.g.
user.admin!
)はActiveRecord::Enum
のみ - 検索
- Enumerize =>
User.with_role(:admin)
(without_role
やrole.find_value
なども生えてくる) - ActiveRecore::Enum =>
User.admin
- Enumerize =>
Enumerize
は他にもi18n対応,複数の値持てる,select
用のoption吐けるなど高性能