Rails と Enumerize のバージョン違いで AR::Base.update_all(attr: :undefined_enum)
の振る舞いが異なるというものがあったので記しておく。
以下のようなコードがあるとする。なお、musics.genre
カラムは NOT NULL とする。
class Music < ActiveRecord::Base extend Enumerize enumerize :genre, in: %i(classic jazz metal) end
enumerize で列挙していない :melodic_speed_metal
という値を使って Music.update_all(genre: :melodic_speed_metal)
を実行すると次のような違いがある。
- Rails 4.2.7.1 と Enumerize 1.1.1 ...
mesics.genre
カラムに'melodic_speed_metal'
という値が入る - Rails 5.0.0.1 と Enumerize 2.0.1 ... 列挙していない値について Enumerize が
nil
を返すため NOT NULL 違反のエラーとなる
どちらかといえば Rails 5 での振る舞いの方が期待しないデータが作られる確度が低まるので、早めにアップグレードできると幸せになれそう。