取得したenumの値とモデルのenumを比較することができず、詰まったので、同じ轍は踏まないように情報共有したいと思います。
準備
User.rbでenumを設定
enum sex: {
# 無回答
no_answer: 0,
# 男性
male: 1,
# 女性
female: 2,
}
rails console
# enumを確認
User.sexes
=> {"no_answer"=>0, "male"=>1, "female"=>2}
User.sexes[:male]
=>1
# インスタンスを取得
user = User.find(4)
# インスタンスのenumを確認
user.sex
=>"male"
詰まったこと
enumの比較ができない・・・
実現したいこと
「インスタンスのsexがmaleであるとき」の条件式が作りたい。
試したこと
user.sex == User.sexes[:male]
=> false
・・・できない。
それもそのはず
user.sex
=>"male"
User.sexes[:male]
=>1
enumのkeyとvalueが逆ならいいのに・・・
じゃあこうしてやれ
user.sex == User.sexes.invert[0]
=> true
結果うまくいったが、0がマジックナンバーみたいで、値の意味がわからない。リファクタリング必至。
解決策
User.sexes[:male] == User.sexes[user.sex]