有没有很好的方法来检索迁移版本号?
我需要在模型中实现一种方法,该方法在特定迁移版本之外的行为方式不同。
我发现连接适配器中的assume_migrated_upto_version正在从数据库中检索版本,但找不到其他版本。
背景:我正在尝试从表A中删除两列,想要将它们移到表B中,并从表A中添加与表B的关联。
在此更改期间,我需要访问这两列。但在那之后,我想为这些列添加代理方法以实现兼容性。
答案 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
目录中