Is there good way to retrieve migration version number?
I need to implement a method in a model which behave differently on and beyond a specific migration version.
There's a much nicer way: rake db:migrate:status
up 20120530222941 Create shenanigans
up 20120613030015 *** NO FILE ***
Indicating that I've deleted my latest migration file.
Or more simply:
> rake db:version
Current version: 20120613030015
For Rails 5.x/6.x:
puts ApplicationRecord.connection.migration_context.current_version
puts ApplicationRecord.connection.migration_context.get_all_versions
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
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,
...