当列与表不匹配时,如何在表上可逆地remove_foreign_key?

时间:2017-09-30 04:11:32

标签: ruby-on-rails ruby-on-rails-5 rails-migrations

我尝试了以下

remove_foreign_key :users, :asset_types, column: :seek_asset_type_id

但得到了错误

  

StandardError:发生错误,此以及所有后续迁移都已取消:
  错误的参数数量(给定3,预期1..2)

文档说它使用与#add_foreign_key相同的选项。

Documentation

该列是先前使用

创建的
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)

4 个答案:

答案 0 :(得分:4)

使用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

答案 1 :(得分:1)

这似乎是remove_foreign_key的不足之处,但是您可以通过使用add_foreign_key定义一个reversible逆向动作来解决此问题:

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

答案 2 :(得分:0)

请删除table_name

  

remove_foreign_key:users,column :: seek_asset_type_id

答案 3 :(得分:0)

试试这个 我已经对它进行了测试并为我工作。

  

remove_foreign_key:用户,姓名:" seek_asset_type_id"