From 8dba32f125cc0b79fe453f38b1044c7bf9fb52ce Mon Sep 17 00:00:00 2001 From: Jon Leighton Date: Thu, 15 Dec 2011 13:23:18 +0000 Subject: [PATCH] Fix #3987. --- .../lib/active_record/attribute_methods/primary_key.rb | 2 ++ activerecord/test/cases/primary_keys_test.rb | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/activerecord/lib/active_record/attribute_methods/primary_key.rb b/activerecord/lib/active_record/attribute_methods/primary_key.rb index e3c7344f59..0560f63949 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 8d248c3f9f..a02dcb9e1c 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 -- GitLab