Rails
Enumerize

enumの元の値を参照したい

モデルでenum

class Model < ApplicationRecord
  extend Enumerize
  enumerize :gender, in: { male: 1, female: 2 }
end

普通に参照

Model.first.gender
=> "female"

enumかかる前の値を参照(rails5)

Model.first.gender_before_type_cast
=> 2

ちなみに、

モデルで、genderをnumericalityでvalidationしてると・・・

class Model < ApplicationRecord
  extend Enumerize
  validates :gender, numericality: true
  enumerize :gender, in: { male: 1, female: 2 }
end

updateするとき、numericalityでひっかかる。

Model.first.update(hoge: "ほげほげ")
=>ActiveRecord::RecordInvalid:
  バリデーションに失敗しました:genderは数値で入力してください

enumにしてれば、数値で変えても文字で変えても適切に変更されるのでnumericalityは外す。

Model.first.gender
=> "female"

Model.first.update!(gender: 1)
=> true
Model.first.gender
=> "male"
Model.first.gender_before_type_cast
=> 1

Model.first.update!(gender: "female")
=> true
Model.first.gender
=> "female"
Model.first.gender_before_type_cast
=> 2