Rails迁移:检索当前迁移版本的最佳方法

时间:2012-01-13 03:53:34

标签: ruby-on-rails ruby-on-rails-3

有没有很好的方法来检索迁移版本号?

我需要在模型中实现一种方法,该方法在特定迁移版本之外的行为方式不同。

我发现连接适配器中的assume_migrated_upto_version正在从数据库中检索版本,但找不到其他版本。


背景:我正在尝试从表A中删除两列,想要将它们移到表B中,并从表A中添加与表B的关联。

在此更改期间,我需要访问这两列。但在那之后,我想为这些列添加代理方法以实现兼容性。

4 个答案:

答案 0 :(得分:133)

有一种更好的方式:rake db:migrate:status

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

表示我删除了最新的迁移文件。

或更简单:

> rake db:version
Current version: 20120613030015

答案 1 :(得分:93)

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

答案 2 :(得分:2)

对于Rails 5.x / 6.x:

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

答案 3 :(得分:0)

如果您不想在不加载应用程序的情况下执行此操作,则可以创建如下脚本:

#!/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目录中