diff --git a/activerecord/lib/active_record/attribute_methods/primary_key.rb b/activerecord/lib/active_record/attribute_methods/primary_key.rb index a10e94d5f703365a61efe462dd9b0ed1f9ed88d5..5ae1ebc9cf7dd1712ee1a82ea4a0c069348543b6 100644 --- a/activerecord/lib/active_record/attribute_methods/primary_key.rb +++ b/activerecord/lib/active_record/attribute_methods/primary_key.rb @@ -24,11 +24,13 @@ def reset_primary_key #:nodoc: end def get_primary_key(base_name) #:nodoc: + return unless base_name + case primary_key_prefix_type when :table_name - base_name.to_s.foreign_key(false) + base_name.foreign_key(false) when :table_name_with_underscore - base_name.to_s.foreign_key + base_name.foreign_key else 'id' end diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index 86d4a90fc45371464893d0edf74a9dfbc43d8776..dc5e91241244a8c9bc89acaf42f9deb77b7d649b 100644 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -1069,6 +1069,7 @@ def test_define_attr_method_with_value def test_define_attr_method_with_block k = Class.new( ActiveRecord::Base ) + k.primary_key = "id" k.send(:define_attr_method, :primary_key) { "sys_" + original_primary_key } assert_equal "sys_id", k.primary_key end @@ -1109,6 +1110,7 @@ def test_set_primary_key_with_value def test_set_primary_key_with_block k = Class.new( ActiveRecord::Base ) + k.primary_key = 'id' k.set_primary_key { "sys_" + original_primary_key } assert_equal "sys_id", k.primary_key end