diff options
author | Yves Senn <yves.senn@gmail.com> | 2016-02-16 11:54:49 +0100 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2016-02-16 11:54:49 +0100 |
commit | 84c18246bc73321130d112c87d18b2b2ddcfcd62 (patch) | |
tree | d504315ce880e6cf36c080bafeed53ca16b13438 | |
parent | 9d378747326d26cf1afdac4433ead22967af0984 (diff) | |
parent | aedde2a33d23252053d4ba6ebdf5f0b2d000aa4b (diff) | |
download | rails-84c18246bc73321130d112c87d18b2b2ddcfcd62.tar.gz rails-84c18246bc73321130d112c87d18b2b2ddcfcd62.tar.bz2 rails-84c18246bc73321130d112c87d18b2b2ddcfcd62.zip |
Merge pull request #23614 from georgemillo/foreign_key
Let t.foreign_key use the same `to_table` twice
Conflicts:
activerecord/CHANGELOG.md
3 files changed, 23 insertions, 2 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index bc5eb483b8..70549243a8 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,8 @@ +* Fix a bug where using `t.foreign_key` twice with the same `to_table` within + the same table definition would only create one foreign key. + + *George Millo* + * Fix a regression on has many association, where calling a child from parent in child's callback results in same child records getting added repeatedly to target. 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 cb10ca9929..4f97c7c065 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb @@ -212,7 +212,7 @@ module ActiveRecord def initialize(name, temporary, options, as = nil) @columns_hash = {} @indexes = {} - @foreign_keys = {} + @foreign_keys = [] @primary_keys = nil @temporary = temporary @options = options @@ -330,7 +330,7 @@ module ActiveRecord end def foreign_key(table_name, options = {}) # :nodoc: - foreign_keys[table_name] = options + foreign_keys.push([table_name, options]) end # Appends <tt>:datetime</tt> columns <tt>:created_at</tt> and diff --git a/activerecord/test/cases/migration/references_foreign_key_test.rb b/activerecord/test/cases/migration/references_foreign_key_test.rb index b01415afb2..85435f4dbc 100644 --- a/activerecord/test/cases/migration/references_foreign_key_test.rb +++ b/activerecord/test/cases/migration/references_foreign_key_test.rb @@ -144,6 +144,22 @@ module ActiveRecord @connection.drop_table "testing", if_exists: true end end + + test "multiple foreign keys can be added to the same table" do + @connection.create_table :testings do |t| + t.integer :col_1 + t.integer :col_2 + + t.foreign_key :testing_parents, column: :col_1 + t.foreign_key :testing_parents, column: :col_2 + end + + fks = @connection.foreign_keys("testings") + + fk_definitions = fks.map {|fk| [fk.from_table, fk.to_table, fk.column] } + assert_equal([["testings", "testing_parents", "col_1"], + ["testings", "testing_parents", "col_2"]], fk_definitions) + end end end end |