remove_foreign_key(from_table, options_or_to_table = {})
public
Removes the given foreign key from the table.
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 named special_fk_name on the
accounts table.
remove_foreign_key :accounts, name: :special_fk_name
# File activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb, line 793
def remove_foreign_key(from_table, options_or_to_table = {})
return unless supports_foreign_keys?
if options_or_to_table.is_a?(Hash)
options = options_or_to_table
else
options = { column: foreign_key_column_for(options_or_to_table) }
end
fk_name_to_delete = options.fetch(:name) do
fk_to_delete = foreign_keys(from_table).detect {|fk| fk.column == options[:column].to_s }
if fk_to_delete
fk_to_delete.name
else
raise ArgumentError, "Table '#{from_table}' has no foreign key on column '#{options[:column]}'"
end
end
at = create_alter_table from_table
at.drop_foreign_key fk_name_to_delete
execute schema_creation.accept(at)
end