Ich habe eine Rechenaufgabe, die nur funktioniert, wenn eine Tabelle vorhanden ist. Ich arbeite mit mehr als 20 Ingenieuren an einer Website, daher möchte ich sicherstellen, dass sie die Tabelle migriert haben, bevor sie eine Rechenaufgabe ausführen können, die die jeweilige Tabelle auffüllt.
Hat AR eine Methode wie Table.exists
? Wie kann ich sicherstellen, dass die Tabelle erfolgreich migriert wurde?
rake db:migrate
scheitern.)Antworten:
In Rails 5 wurde die API in Bezug auf Tabellen / Ansichten und Datenquellen explizit .
In Rails 2, 3 und 4 handelt es sich bei der API um Tabellen .
Abrufen des Status von Migrationen:
Wenn Sie weitere APIs für Migrationen oder Metadaten benötigen, siehe:
Dies ist die
ActiveRecord::Base
Klasse für dieschema_migrations
Tabellebei dem die gesamte Aktion ausgeführt wird, wenn Migrationen ausgeführt werden
quelle
ActiveRecord::Base.connection.table_exist 'users'
würde nach einer Benutzertabelle suchen.ActiveRecord::Base.connection.table_exists? 'kittens
würde nach einem Kätzchentisch suchen. Es sei denn, ich habe alle Kätzchen vernichtet!drop_table :kittens
.index_exists?('kittens', 'paws')
drop_table(:hosts_users) if table_exists? :hosts_users
ActiveRecord::Base.connection.data_source_exists? 'table_name'
ist jetzt die richtigeauch wenn keine Tabelle vorhanden ist:
Modell
Kitten
, erwartete Tischschienenkittens
3:Kitten.table_exists? # => false
quelle
Ich habe dies herausgefunden, als ich versucht habe, eine Tabelle über eine Migration zu entfernen:
funktioniert für Rails 3.2
Dieses einfachere Formular wird in Rails 5 verfügbar sein:
Referenz: https://github.com/rails/rails/pull/16366
Und hier ist der CHANGELOG von Rails 5 ActiveRecord :
quelle
Schienen 5.1
oder
quelle
Der richtige Weg, dies zu tun, ist Model.table_exists?
quelle