1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Migrations will raise an exception if there are multiple column definitions (same name).

This commit is contained in:
Federico Martinez 2018-05-31 00:49:25 -03:00
parent c1844477a1
commit 7ef9849e3d
3 changed files with 23 additions and 2 deletions

View file

@ -1,3 +1,9 @@
* Migrations raise when duplicate column definition.
Fixes #33024.
*Federico Martinez*
* Bump minimum SQLite version to 3.8 * Bump minimum SQLite version to 3.8
*Yasuo Honda* *Yasuo Honda*

View file

@ -356,8 +356,12 @@ module ActiveRecord
type = type.to_sym if type type = type.to_sym if type
options = options.dup options = options.dup
if @columns_hash[name] && @columns_hash[name].primary_key? if @columns_hash[name]
if @columns_hash[name].primary_key?
raise ArgumentError, "you can't redefine the primary key column '#{name}'. To define a custom primary key, pass { id: false } to create_table." raise ArgumentError, "you can't redefine the primary key column '#{name}'. To define a custom primary key, pass { id: false } to create_table."
else
raise ArgumentError, "you can't define an already defined column '#{name}'."
end
end end
index_options = options.delete(:index) index_options = options.delete(:index)

View file

@ -196,6 +196,17 @@ module ActiveRecord
assert_equal "you can't redefine the primary key column 'testing_id'. To define a custom primary key, pass { id: false } to create_table.", error.message assert_equal "you can't redefine the primary key column 'testing_id'. To define a custom primary key, pass { id: false } to create_table.", error.message
end end
def test_create_table_raises_when_defining_existing_column
error = assert_raise(ArgumentError) do
connection.create_table :testings do |t|
t.column :testing_column, :string
t.column :testing_column, :integer
end
end
assert_equal "you can't define an already defined column 'testing_column'.", error.message
end
def test_create_table_with_timestamps_should_create_datetime_columns def test_create_table_with_timestamps_should_create_datetime_columns
connection.create_table table_name do |t| connection.create_table table_name do |t|
t.timestamps t.timestamps