Gibt es eine gute Möglichkeit, die Versionsnummer der Migration abzurufen?
Ich muss eine Methode in einem Modell implementieren, die sich bei und über eine bestimmte Migrationsversion hinaus anders verhält.
Ich habe festgestellt, dass davon ausgegangen wird, dass_migrated_upto_version im Verbindungsadapter die Version aus der Datenbank abruft, aber keine anderen finden kann.
Hintergrund: Ich versuche, zwei Spalten aus Tabelle A zu entfernen, sie in Tabelle B zu verschieben und der Tabelle B aus Tabelle A eine Zuordnung hinzuzufügen.
Während dieser Änderung muss ich auf diese beiden Spalten zugreifen. Danach möchte ich aus Kompatibilitätsgründen eine Proxy-Methode für diese Spalten hinzufügen.
ruby-on-rails
ruby-on-rails-3
Shigeya
quelle
quelle
Antworten:
Schienen
5.2
und höher:> 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, ...
Schienen bis
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, ...
quelle
ActiveRecord::Migrator.get_all_versions
ist nicht enthalten anstehend Migrationen. Es enthält nur Migrationen, die bereits ausgeführt wurden.ActiveRecord::Migrator.get_all_versions
funktioniert nicht in Rails 6. Verwendung:ApplicationRecord.connection.migration_context.current_version
ApplicationRecord.connection.migration_context.get_all_versions
für Rails 6.Es gibt einen viel schöneren Weg:
rake db:migrate:status
up 20120530222941 Create shenanigans up 20120613030015 *** NO FILE ***
Zeigt an, dass ich meine letzte Migrationsdatei gelöscht habe.
Oder einfacher:
> rake db:version Current version: 20120613030015
quelle
Für Schienen 5.x / 6.x:
quelle
Wenn Sie dies nicht tun möchten, ohne Ihre App zu laden, können Sie ein Skript wie das folgende erstellen:
#!/usr/bin/env ruby root = File.expand_path("../..", __FILE__) lines = `ls #{root}/db/migrate` puts lines.split("\n").last.split(" ").last.split("_").first
Beachten Sie, dass sich die
root
Zeile in einembin
Verzeichnis befindetquelle