有没有一种好的方法来检索最新的迁移版本号?
我需要在模型中实现一个方法,该方法在特定的迁移版本上和其后行为不同。
我发现连接适配器中的assume_migrated_upto_version可以从数据库中检索版本,但找不到其他方法。
有没有一种好的方法来检索最新的迁移版本号?
我需要在模型中实现一个方法,该方法在特定的迁移版本上和其后行为不同。
我发现连接适配器中的assume_migrated_upto_version可以从数据库中检索版本,但找不到其他方法。
有一个更好的方法:rails db:migrate:status
up 20120530222941 Create shenanigans
up 20120613030015 *** NO FILE ***
我删除了最新的迁移文件。
更简单地说:
> rails db:version
Current version: 20120613030015
注意:对于 Rails 版本低于 5.0 的情况,将 rails
替换为 rake
。
Rails 5.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,
...
针对Rails版本 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
不包括待处理的迁移。它仅包括已经运行的迁移。 - Joshua PinterActiveRecord::Migrator.get_all_versions
在 Rails 6 中无法使用。
请使用以下代码:
ApplicationRecord.connection.migration_context.current_version
ApplicationRecord.connection.migration_context.get_all_versions
来替代。 - Marian13对于Rails 5.x/6.x:
puts ApplicationRecord.connection.migration_context.current_version
puts ApplicationRecord.connection.migration_context.get_all_versions
#!/usr/bin/env ruby
root = File.expand_path("../..", __FILE__)
lines = `ls #{root}/db/migrate`
puts lines.split("\n").last.split(" ").last.split("_").first
root
行,因为我的脚本在bin
目录中。