aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2012-10-28 18:05:30 +0100
committerYves Senn <yves.senn@gmail.com>2012-10-28 20:40:37 +0100
commite4790a2c5b99704f430c837d8f22fec418f2c8af (patch)
treed774ad70503daabeaba3233a0da1f7fcf94a7e17 /activerecord/lib
parentb104157314e95115b74e7ddd968f9c7734309a6e (diff)
downloadrails-e4790a2c5b99704f430c837d8f22fec418f2c8af.tar.gz
rails-e4790a2c5b99704f430c837d8f22fec418f2c8af.tar.bz2
rails-e4790a2c5b99704f430c837d8f22fec418f2c8af.zip
raise `ArgumentError` when redefining the primary key column. Closes #6378
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb9
1 files changed, 9 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
index dca355aa93..0f6b177b62 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
@@ -234,6 +234,10 @@ module ActiveRecord
name = name.to_s
type = type.to_sym
+ if primary_key_column_name == name
+ raise ArgumentError, "you can't redefine the primary key column '#{name}'. To define a custom primary key, pass { id: false } to create_table."
+ end
+
column = self[name] || new_column_definition(@base, name, type)
limit = options.fetch(:limit) do
@@ -302,6 +306,11 @@ module ActiveRecord
definition
end
+ def primary_key_column_name
+ primary_key_column = columns.detect { |c| c.type == :primary_key }
+ primary_key_column && primary_key_column.name
+ end
+
def native
@base.native_database_types
end