有没有好的方法来检索迁移版本号?
我需要在模型中实现一个方法,该方法在特定的迁移版本之上和之外具有不同的行为。
我发现连接适配器中的假定为_migrated_upto_version正在从数据库检索版本,但找不到其他版本。
背景:我正在尝试从表A中删除两列,想将它们移到表B中,并从表A添加到表B的关联。
在此更改期间,我需要访问这两列。但是在那之后,我想为这些列添加代理方法以实现兼容性。
有没有好的方法来检索迁移版本号?
我需要在模型中实现一个方法,该方法在特定的迁移版本之上和之外具有不同的行为。
我发现连接适配器中的假定为_migrated_upto_version正在从数据库检索版本,但找不到其他版本。
背景:我正在尝试从表A中删除两列,想将它们移到表B中,并从表A添加到表B的关联。
在此更改期间,我需要访问这两列。但是在那之后,我想为这些列添加代理方法以实现兼容性。
Answers:
Rails5.2
及更高版本:
> ApplicationRecord.connection.migration_context.current_version
(0.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
=> 20200510093804
> ApplicationRecord.connection.migration_context.get_all_versions
(0.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
=> [20191005164928,
20191006111502,
...
达到5.1.7
:
> ActiveRecord::Migrator.current_version
(0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations"
=> 20120110085802
> ActiveRecord::Migrator.get_all_versions
(0.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations"
=> [20111114121610,
20111115091108,
...
ActiveRecord::Migrator.get_all_versions
不不包括悬而未决的迁移。它仅包括已经运行的迁移。
ActiveRecord::Migrator.get_all_versions
不会对Rails 6.使用工作:ApplicationRecord.connection.migration_context.current_version
ApplicationRecord.connection.migration_context.get_all_versions
为Rails 6
有一种更好的方法: rake db:migrate:status
up 20120530222941 Create shenanigans
up 20120613030015 *** NO FILE ***
表示我已经删除了最新的迁移文件。
或更简单地说:
> rake db:version
Current version: 20120613030015