diff options
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 | 
