diff --git a/activerecord/lib/active_record/enum.rb b/activerecord/lib/active_record/enum.rb index 8a76c72869344..1bee507bdd907 100644 --- a/activerecord/lib/active_record/enum.rb +++ b/activerecord/lib/active_record/enum.rb @@ -204,8 +204,8 @@ def enum(definitions) pairs = values.respond_to?(:each_pair) ? values.each_pair : values.each_with_index pairs.each do |label, value| - label = label.to_s enum_values[label] = value + label = label.to_s value_method_name = "#{prefix}#{label}#{suffix}" value_method_names << value_method_name diff --git a/activerecord/test/cases/enum_test.rb b/activerecord/test/cases/enum_test.rb index 849f53851d262..cd4070460464e 100644 --- a/activerecord/test/cases/enum_test.rb +++ b/activerecord/test/cases/enum_test.rb @@ -700,6 +700,18 @@ def self.name; "Book"; end assert_not_predicate computer, :"Etc/GMT-1?" end + test "deserialize enum value to original hash key" do + proposed = Class.new + written = Class.new + klass = Class.new(ActiveRecord::Base) do + self.table_name = "books" + enum status: { proposed => 0, written => 1 } + end + + book = klass.create!(status: 0) + assert_equal proposed, book.status + end + test "enum logs a warning if auto-generated negative scopes would clash with other enum names" do old_logger = ActiveRecord::Base.logger logger = ActiveSupport::LogSubscriber::TestHelper::MockLogger.new