51

在我的 Rails 4 应用程序中,我想将我的迁移文件折叠成一个大文件(类似于 schema.rb),因为是时候做一些内务处理了,但我不确定如何访问存储迁移数据的数据库中的表这样当我运行迁移时,我不会收到任何错误/冲突。

问题如何访问和删除存储迁移数据的表中的数据?

4

6 回答 6

73

为了好玩,您还可以通过为它们制作模型类来在控制台中操作它们...

class SchemaMigration < ActiveRecord::Base; self.primary_key = :version; end

然后您可以执行 SchemaMigration.all、SchemaMigration.last.delete 等。

真的只是使用 SQL 的替代品,而且你很少需要在这个低级别上搞砸......通常是一个坏主意,但看看如何去做很酷:)

于 2015-02-11T04:51:58.170 回答
50

另一种解决方案可能是通过以下方式访问它:

ActiveRecord::SchemaMigration

大卫给出的答案在我的上下文中不起作用。

于 2016-04-06T12:47:10.723 回答
18

schema_migrations表包含修订号;最后一条记录是最近执行的迁移。您可以手动操作这些记录。

于 2013-09-30T18:04:31.747 回答
8

获取最新版本:

ActiveRecord::SchemaMigration.last.version

或所有版本:

ActiveRecord::SchemaMigration.all.map(&:version)
于 2019-04-26T14:24:39.823 回答
7

不知道你为什么要这样做,但你去:

ActiveRecord::Migrator.get_all_versions

于 2017-01-19T05:46:27.627 回答
-1

我不得不做一些这样的清理工作:看似微不足道的迁移的积累造成了如此大的污染,以至于事情变得毫无意义。

作为开发的最后阶段(不建议在生产中使用一次),您可以清除 schema_migrations 表,合并您的迁移(与类一对一)并创建一个新表(注意:运行migrate有不同的行为,具体取决于 mysql与postgresql)

@david-lowenfels 的答案非常适合这种情况。

所有这一切,自然地,假设您没有在键、索引、默认值方面犯过错误。这是一项严肃的任务,但在开发阶段结束时并不是一项不明智的任务。

于 2020-08-31T11:44:01.723 回答