Rails 迁移: 如何检索当前的迁移版本?

有没有检索最新迁移版本号的好方法?

我需要在一个模型中实现一个方法,这个方法在特定的迁移版本上和之后的行为都不同。

我发现假设连接适配器中的/////////////////////////////////////////////////////////////////////////。

42896 次浏览

Rails 5.2 and higher:

> 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 up to 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,
...

There's a much nicer way: rails db:migrate:status

up     20120530222941  Create shenanigans
up     20120613030015  *** NO FILE ***

Indicating that I've deleted my latest migration file.

Or more simply:

> rails db:version
Current version: 20120613030015

NOTE: for Rails versions prior to 5.0 replace rails with rake.

If you don't want to do this without loading your app you can create a script like this:

#!/usr/bin/env ruby


root = File.expand_path("../..", __FILE__)
lines = `ls #{root}/db/migrate`
puts lines.split("\n").last.split(" ").last.split("_").first

Note the root line is because my script is in a bin dir

For Rails 5.x/6.x:

puts ApplicationRecord.connection.migration_context.current_version
puts ApplicationRecord.connection.migration_context.get_all_versions