コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rails5でenumの文字列ではなく、実態値が取得したい場合は {{enumの名前}}_before_type_cast

昔はできたが今はできない系

環境

$ bundle exec rails -v
Rails 5.2.1

以下のようなenumがあるとする

class User < ActiveRecord::Base
    enum sex: { not_known:0, male: 1, female: 2, not_applicable: 9 }
#...(後略)....

こんなときに『男性のときは1の数値がほしい』となっても

user = User.find(1)
user.sex
# => "male"

のようになってしまう。

整数値部分を取りたい場合は、cast前の値と取りたいということになるので {{カラム名}}_before_type_cast が使える

user = User.find(1)
user.sex_before_type_cast
# => 1

参考リンク