From 4e380828ffa8279740256164c6b83148cf0cbf13 Mon Sep 17 00:00:00 2001 From: Julius de Bruijn Date: Wed, 30 Nov 2011 17:56:16 +0100 Subject: If the table behind has no primary key, do not ask again and just return nil. --- activerecord/lib/active_record/attribute_methods/primary_key.rb | 3 ++- activerecord/test/cases/attribute_methods_test.rb | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/activerecord/lib/active_record/attribute_methods/primary_key.rb b/activerecord/lib/active_record/attribute_methods/primary_key.rb index 16362acfe9..6eff716703 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 @@ module ActiveRecord # 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 12e5715710..7c9383b194 100644 --- a/activerecord/test/cases/attribute_methods_test.rb +++ b/activerecord/test/cases/attribute_methods_test.rb @@ -53,6 +53,11 @@ class AttributeMethodsTest < ActiveRecord::TestCase 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" -- cgit v1.2.3