diff --git a/activerecord/lib/active_record/attribute_methods/primary_key.rb b/activerecord/lib/active_record/attribute_methods/primary_key.rb index e3c7344f59dad896fa4ea04ab5ef028f800b0a9a..0560f6394953eb21d0937e842a00bbfa3df22f23 100644 --- a/activerecord/lib/active_record/attribute_methods/primary_key.rb +++ b/activerecord/lib/active_record/attribute_methods/primary_key.rb @@ -102,6 +102,8 @@ def primary_key=(value) @original_primary_key = @primary_key if defined?(@primary_key) @primary_key = value && value.to_s @quoted_primary_key = nil + + connection.schema_cache.primary_keys[table_name] = @primary_key if connected? end def set_primary_key(value = nil, &block) #:nodoc: diff --git a/activerecord/test/cases/primary_keys_test.rb b/activerecord/test/cases/primary_keys_test.rb index 8d248c3f9fb44b63e7be8540f1c1c9723070f5a5..a02dcb9e1c6b1f479372d3dd4c358f41bc75440c 100644 --- a/activerecord/test/cases/primary_keys_test.rb +++ b/activerecord/test/cases/primary_keys_test.rb @@ -148,6 +148,16 @@ def test_quoted_primary_key_after_set_primary_key k.primary_key = "foo" assert_equal k.connection.quote_column_name("foo"), k.quoted_primary_key end + + def test_set_primary_key_sets_schema_cache + klass = Class.new(ActiveRecord::Base) + klass.table_name = 'fuuuuuu' + klass.connection.create_table(:fuuuuuu, :id => false) { |t| t.integer :omg } + klass.primary_key = 'omg' + assert klass.connection.schema_cache.columns_hash['fuuuuuu']['omg'].primary + ensure + klass.connection.drop_table(:fuuuuuu) if klass.table_exists? + end end class PrimaryKeyWithNoConnectionTest < ActiveRecord::TestCase