diff --git a/lib/enumerize/activerecord.rb b/lib/enumerize/activerecord.rb index f6dec5f..c7af23c 100644 --- a/lib/enumerize/activerecord.rb +++ b/lib/enumerize/activerecord.rb @@ -58,6 +58,8 @@ def write_attribute(attr_name, value, *options) # Support multiple enumerized attributes def becomes(klass) became = super + return became unless became.respond_to?(:enumerized_attributes) + klass.enumerized_attributes.each do |attr| # Rescue when column associated to the enum does not exist. begin diff --git a/test/activerecord_test.rb b/test/activerecord_test.rb index aa51e13..bc0df76 100644 --- a/test/activerecord_test.rb +++ b/test/activerecord_test.rb @@ -521,6 +521,25 @@ def self.name expect(user.interests).must_equal uniq_user.interests end + it 'allows an object to #becomes a non-Enumerize model' do + class NonEnumerizeUser < ActiveRecord::Base + self.table_name = "users" + end + + class EnumerizeUser < NonEnumerizeUser + extend Enumerize + + enumerize :role, in: [:admin, :ghost] + end + EnumerizeUser.delete_all + + user = EnumerizeUser.create(role: :admin) + expect(user.role).must_equal 'admin' + + non_enumerize_user = user.becomes(NonEnumerizeUser) + expect(non_enumerize_user).must_be :valid? + end + it "doesn't update record" do Document.delete_all