Method: ActiveRecord::ConnectionAdapters::SchemaStatements#remove_foreign_key

Defined in:
activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb

#remove_foreign_key(from_table, to_table = nil, **options) ⇒ Object

Removes the given foreign key from the table. Any option parameters provided will be used to re-add the foreign key in case of a migration rollback. It is recommended that you provide any options used when creating the foreign key so that the migration can be reverted properly.

Removes the foreign key on accounts.branch_id.

remove_foreign_key :accounts, :branches

Removes the foreign key on accounts.owner_id.

remove_foreign_key :accounts, column: :owner_id

Removes the foreign key on accounts.owner_id.

remove_foreign_key :accounts, to_table: :owners

Removes the foreign key named special_fk_name on the accounts table.

remove_foreign_key :accounts, name: :special_fk_name

The options hash accepts the same keys as SchemaStatements#add_foreign_key with an addition of

:to_table

The name of the table that contains the referenced primary key.



1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb', line 1037

def remove_foreign_key(from_table, to_table = nil, **options)
  return unless supports_foreign_keys?

  fk_name_to_delete = foreign_key_for!(from_table, to_table: to_table, **options).name

  at = create_alter_table from_table
  at.drop_foreign_key fk_name_to_delete

  execute schema_creation.accept(at)
end