何かと便利でよく使われるenum
enumは列挙型と訳され、enumを使えば文字の配列に整数を順番に割り当てることができます。
なので、他のプログラマーに読みやすいコードを書くことができます。(可読性が上がる)
整数値の範囲が決定されるので誤った数値を使ってしまうことを前もって、防げます。
参考:https://www.sejuku.net/blog/26369
基本的な使い方はこちら↓
enumは整数値(0,1,2,3・・・)をにキーワードを割り当てて抽象化することができる
コードの可読性が上がるので、とても便利です
hoge.rb
class Hoge < ActiveRecord::Base
enum department_status: {
unselected: 0,
human_resourse: 1,
development: 2,
corporate: 3,
other_department: 99
}
end
@hoge = Hoge.new(department_status: :development)
@hoge.department_status # => "development"
#設定したKeyがmethodとして使えるようになる
@hoge.corporate? # => false
@hoge.development? # => true
だが、enumには闇があった...
基本的なenumの使い方としては整数値を抽象化することです
しかし、あるソースコードを読んでいるときに整数値の代わりにbooleanを入れているのを見かけた
fuga.rb
class Fuga < ActiveRecord::Base
enum is_target_country: {
is_target_japan: true,
is_not_target_other: false
}
end
# is_target_countryカラムの初期値は以下でデフォルトでtrueが入っている
# is_target_country :boolean default(TRUE)
@fuga = Fuga.new
@fuga.is_target_country # => "is_target_japan"
@fuga.is_target_japan? # => true
ここでis_target_countryにfalseを入れようとすると問題が起きる
# falseを入れてみる
@fuga.is_target_country = false # => false
#問題なくfalseが返ってくる
#しかし、改めて@fuga.is_target_countryを確認してみると・・・
@fuga.is_target_country # => nil
#nilが入ってしまっている・・・(恐怖!!!)
なぜかfalseを入れるとnilに変換される
おそらく、enumがfalseが入ってきた時はnilに変換している?
さすがにenumにbooleanを設定している人は少ないと思うが、もししている人が入れば注意して欲しい