在Rails中重新创建表

时间:2016-08-24 15:00:00

标签: ruby-on-rails ruby postgresql

我使用Rails和Postgres。我目前创建了一个Like表。我需要删除此表并重新创建它。这是我到目前为止所做的事情。

1)将create_likes迁移文件重命名为create_likes_old,以便与迁移中的文件名冲突。

2)将迁移中的表格名称从create_table :likes更改为create_table :likes_old

3)生成新的create_likes迁移,创建一个名为Like的表。

目前,当我运行rake db:migrate时,我遇到了以下问题:

PG::DuplicateTable: ERROR:  relation "likes" already exists

这使得似乎从未将Like表重命名为LikeOld。什么错了,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

旧的迁移不会在您更改内容时运行,而不应重命名。即使它们确实运行,将create_table :likes更改为create_table :old_likes也不可能更改现有表的名称。那不是create_table的作用。充其量,重新运行该迁移现在将导致创建一个名为old_likes的新表,没有内容,同时保持旧likes表不受影响。实际上重新运行该迁移将会失败,因为它将首先尝试撤消迁移,删除尚不存在的表old_likes

您需要做的是创建一个名为rename_likes_to_old_likes的新迁移,它实际上使用rename_table重命名该表。然后,要么:

  • 完全删除旧迁移,因此您可以引入具有相同名称的新迁移

OR

  • 使用create_new_likes_table等唯一名称创建新迁移,并在那里介绍新表。