【问题标题】:Rails 3: Drop a table using migrationRails 3:使用迁移删除表
【发布时间】:2011-10-29 09:47:30
【问题描述】:

我有一个使用迁移创建的表,现在我想摆脱这个表。我很确定我可以退出该迁移,但我找不到执行此操作的语法。我通过搜索Rails DB Migration - How To Drop a Table?发现了这个问题

但他基本上说您可以找到所需的内容并提供链接。我阅读了该链接,但没有看到任何说明如何操作的内容。我看到了它的碎片,但我不知道如何将它们组合在一起。

我在迁移中看到它有一个 self.down 方法,我真的只需要知道如何调用它。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 migration


    【解决方案1】:

    销毁模型并不是最好的办法。

    改为在您的 rails 控制台中运行此命令:rake db:rollback

    (要访问 rails 控制台,请在终端中键入 rails c,如 here 所示)

    【讨论】:

      【解决方案2】:

      您可以使用 rake 删除表来销毁模型:

      rails destroy model your_model
      

      【讨论】:

      • Rails 模型不是表,也不是数据库的任何其他部分。虽然命令 generate model Foo 会创建相应的数据库迁移以创建用于存储 Foo 实例的表,但命令 destroy model Foo 不会破坏表。正如railsforum.com/viewtopic.php?pid=10961#p10961 所说:“但请注意——当你生成一个模型时,它会创建一个数据库迁移。如果你在那个模型上运行'destroy',它会删除迁移文件,但不会删除数据库表......”
      【解决方案3】:
      rake db:rollback STEP=n
      

      其中 n 是您需要回滚的步数。如果您关闭 STEP,它只会回滚 1。

      要迁移到特定版本,请使用:

      rake db:migrate:down VERSION=20080906120000
      

      如果您想快速应用表删除,您可以创建一个新的迁移,运行它,然后将它与您不再需要的原始迁移一起删除。删除表的语法是:

      drop_table :table_name
      

      【讨论】:

        【解决方案4】:

        尝试创建一个空迁移并使用:

        drop_table :table_name
        

        【讨论】:

          【解决方案5】:

          您可以使用以下命令回滚上次迁移:

          rake db:rollback

          这将运行self.down 方法,它应该是drop_table :table_name

          【讨论】:

          • 如果这是我上个月运行的迁移并且从那以后我做了很多事情怎么办?
          • @jhorra...我相信在这种情况下,您最好在up 方法中编写一个具有drop_table :table_name 的新迁移文件,在down 方法中编写create_table :table_name 并运行移民。这样,使用同一项目的任何其他人在使用 rake db:migrate 时都会删除该表
          • 好,我走新的迁移路线
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-07
          • 2018-09-22
          • 2011-04-30
          • 1970-01-01
          • 1970-01-01
          • 2019-01-29
          • 2011-02-19
          相关资源
          最近更新 更多