diff --git a/lib/enumerize/activerecord.rb b/lib/enumerize/activerecord.rb index 35218b3..5fcf26f 100644 --- a/lib/enumerize/activerecord.rb +++ b/lib/enumerize/activerecord.rb @@ -126,13 +126,8 @@ def serialize(value) end def cast(value) - return value if @subtype.is_a?(Type) - - if value.is_a?(::Enumerize::Value) - value - else - @attr.find_value(@subtype.cast(value)) - end + value = @subtype.cast(value) if !@subtype.is_a?(Type) && !value.is_a?(Enumerize::Value) + @attr.find_value(value) end def as_json(options = nil) diff --git a/test/activerecord_test.rb b/test/activerecord_test.rb index 6b3f00b..e36ee64 100644 --- a/test/activerecord_test.rb +++ b/test/activerecord_test.rb @@ -731,6 +731,22 @@ class AdminUser < User expect(admin.account_type).must_equal 'pro' end + it 'has correct value in _was attribute' do + user = User.create(status: 'active') + user.status = 'blocked' + expect(user.status_was).must_equal 'active' + end + + it 'has correct value in _was attribute in child class' do + class AdminUser < User + enumerize :status, :in => { active: 1, blocked: 2, inactive: 3 }, scope: true + end + + admin = AdminUser.create(status: 'active') + admin.status = 'blocked' + expect(admin.status_was).must_equal 'active' + end + if Rails::VERSION::MAJOR >= 6 it 'supports AR#insert_all' do User.delete_all