当列与 table 不匹配时,如何在 table 上可逆地 remove_foreign_key?
How do I reversibly remove_foreign_key on a table when the column doesn't match the table?
我尝试了以下方法
remove_foreign_key :users, :asset_types, column: :seek_asset_type_id
但是报错
StandardError: An error has occurred, this and all later migrations canceled:
wrong number of arguments (given 3, expected 1..2)
文档说它使用与 #add_foreign_key
相同的选项。
该列之前是用
创建的
add_reference :users, :seek_asset_type, foreign_key: {to_table: :asset_types}
这是定义:
"fk_rails_4dcaa1c59c" FOREIGN KEY (seek_asset_type_id) REFERENCES asset_types(id)
请删除table_name
remove_foreign_key :users, column: :seek_asset_type_id
试试这个
我已经对其进行了测试并为我工作。
remove_foreign_key :users, name: "seek_asset_type_id"
使用revert
:
def change
revert do
add_reference :users, :seek_asset_type, foreign_key: { to_table: :asset_types }
end
end
另一种方法是通过名称还原迁移:
def change
revert AddAssetTypeReferenceToUsers
# I made up this migration name,
# so please fill in the appropriate name
end
这似乎是 remove_foreign_key
中的缺陷,但您可以通过使用 reversible
:
定义 add_foreign_key
反向操作来解决它
reversible do |dir|
dir.up do
remove_foreign_key :users, column: :seek_asset_type
end
dir.down do
add_foreign_key :users, :asset_types, column: :seek_asset_type
end
end
我尝试了以下方法
remove_foreign_key :users, :asset_types, column: :seek_asset_type_id
但是报错
StandardError: An error has occurred, this and all later migrations canceled:
wrong number of arguments (given 3, expected 1..2)
文档说它使用与 #add_foreign_key
相同的选项。
该列之前是用
创建的add_reference :users, :seek_asset_type, foreign_key: {to_table: :asset_types}
这是定义:
"fk_rails_4dcaa1c59c" FOREIGN KEY (seek_asset_type_id) REFERENCES asset_types(id)
请删除table_name
remove_foreign_key :users, column: :seek_asset_type_id
试试这个 我已经对其进行了测试并为我工作。
remove_foreign_key :users, name: "seek_asset_type_id"
使用revert
:
def change
revert do
add_reference :users, :seek_asset_type, foreign_key: { to_table: :asset_types }
end
end
另一种方法是通过名称还原迁移:
def change
revert AddAssetTypeReferenceToUsers
# I made up this migration name,
# so please fill in the appropriate name
end
这似乎是 remove_foreign_key
中的缺陷,但您可以通过使用 reversible
:
add_foreign_key
反向操作来解决它
reversible do |dir|
dir.up do
remove_foreign_key :users, column: :seek_asset_type
end
dir.down do
add_foreign_key :users, :asset_types, column: :seek_asset_type
end
end