有没有检索迁移版本号的好方法?
我需要在一个模型中实现一个方法,该方法在特定的迁移版本上和在特定的迁移版本之外表现不同。
我发现连接适配器中的assume_migrated_upto_version正在从数据库中检索版本,但找不到其他版本。
背景:我正在尝试从表A中删除两列,希望将它们移动到表B中,并将关联从表A添加到表B。
在此更改期间,我需要访问这两列。但在此之后,为了兼容,我想为这些列添加代理方法。
发布于 2012-01-13 07:14:55
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,
...
发布于 2012-06-15 18:37:31
有一种更好的方法:rake db:migrate:status
up 20120530222941 Create shenanigans
up 20120613030015 *** NO FILE ***
表示我已经删除了最新的迁移文件。
或者更简单地说:
> rake db:version
Current version: 20120613030015
发布于 2018-09-07 04:14:25
如果你不想在不加载应用程序的情况下这样做,你可以像这样创建一个脚本:
#!/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
目录中
https://stackoverflow.com/questions/8845706
复制相似问题