diff --git a/activerecord/lib/active_record/attribute_methods/primary_key.rb b/activerecord/lib/active_record/attribute_methods/primary_key.rb index 16362acfe955fc210ed2b2d9780d9d0f9be50536..6eff7167034019fc775a2a77377b599721aea7db 100644 --- a/activerecord/lib/active_record/attribute_methods/primary_key.rb +++ b/activerecord/lib/active_record/attribute_methods/primary_key.rb @@ -33,7 +33,8 @@ def dangerous_attribute_method?(method_name) # Defines the primary key field -- can be overridden in subclasses. Overwriting will negate any effect of the # primary_key_prefix_type setting, though. def primary_key - @primary_key ||= reset_primary_key + @primary_key = reset_primary_key unless defined? @primary_key + @primary_key end # Returns a quoted version of the primary key name, used to construct SQL statements. diff --git a/activerecord/test/cases/attribute_methods_test.rb b/activerecord/test/cases/attribute_methods_test.rb index 12e5715710fc82bf8a32bebe604f67770715b1c7..7c9383b194239ef6f9181b9c9c5dca370fc3b27a 100644 --- a/activerecord/test/cases/attribute_methods_test.rb +++ b/activerecord/test/cases/attribute_methods_test.rb @@ -53,6 +53,11 @@ def test_attribute_present_with_booleans assert Boolean.find(b4.id).attribute_present?(:value) end + def test_caching_nil_primary_key + Minimalistic.expects(:reset_primary_key).returns(nil).once + Minimalistic.create! + end + def test_attribute_keys_on_new_instance t = Topic.new assert_equal nil, t.title, "The topics table has a title column, so it should be nil"