Es gibt zwei Tabellen, die Items-Tabelle und die Users-Tabelle. Um die User-ID-Spalte zur zuerst erstellten Items-Tabelle hinzuzufügen, habe ich zweimal "Rails DB: Rollback" und dann "Rails DB: Migrate" ausgeführt. Ich habe jedoch die Fehlermeldung erhalten, dass der externe Schlüssel nicht vorhanden ist und der Benutzer SQL nicht vorhanden ist. (Ursprünglich hätte ich mit add eine Spalte hinzufügen sollen.)
Vor dem Erstellen der Benutzertabelle wurde die Elementtabelle vorläufig erstellt, sodass ein Fehler aufgetreten ist, dass die der Elementtabelle zugeordnete Benutzer-ID nicht vorhanden ist.
Angenommen, Sie haben die erste Elementtabelle ** ab dem 1. September ** erstellt.
class CreateItems < ActiveRecord::Migration[6.0]
def change
create_table :items do |t|
t.references :user, foreign_key: true
Dies hängt mit der Fehlerursache zusammen
t.string :name, null: false
t.timestamps
end
end
Unten weggelassen
Angenommen, Sie haben die zweite Benutzertabelle ** ab dem 5. September ** erstellt.
class DeviseCreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :name, null: false
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
Folgendes wird weggelassen
Ich denke, die Datenbankdatei sieht aus wie db / migrate / 20200905052006_devise_create_users.rb, aber der Nummernteil "20200905052006" gibt das Datum und die Uhrzeit an, zu der die Datenbank erstellt wurde.
Rails db: migrate
migriert die Datenbanken nacheinander ab dem ältesten Datum und der ältesten Uhrzeit. In diesem Fall wird die Datenbank der am 1. September erstellten Items-Tabelle zuerst migriert. ..
Mit anderen Worten, wenn Sie versuchen, die Tabelle "Elemente" zu migrieren, während die Tabelle "Benutzer" nicht migriert wurde, wird "t.references: user, Foreign_key: true" nicht als gültig bestimmt, und es gibt keinen externen Schlüssel für den Benutzer. Ich erhalte eine Fehlermeldung, dass kein SQL vorhanden ist.
Wenn Sie die Nummer im Datums- und Zeitteil umbenennen, speichern Sie die Datei so, dass die Zeitreihe umgekehrt wird, und führen Sie dann "Rails db: migrate" aus. Die Benutzertabelle wird zuerst migriert und der externe Schlüssel ist nicht vorhanden. Der Fehler, dass SQL nicht vorhanden ist, wurde behoben.
Ich konnte keine genaue Fehlermeldung veröffentlichen, da ich den Fehler nicht gut aufgezeichnet habe. Ich werde Notizen mit einem Gefühl der Spannung machen, während ich mir der Veröffentlichung bewusst bin.
Wenn die Spalte mit add hinzugefügt würde, wäre die Zeitreihe in erster Linie falsch und es würde kein Fehler auftreten. Wenn "Hinzufügen" festgelegt wurde, sollte es möglich sein, nach der Migration der Benutzertabelle nur die Spalte "Benutzer-ID" der Tabelle "Elemente" zu migrieren. Es war ein Fehler, "Rails DB: Rollback" zweimal auszuführen und die Spaltennamen in der Items-Tabelle direkt zu ändern.
Rails db: migrate
wird in der Reihenfolge vom ältesten Datum und der ältesten Uhrzeit ausgeführt. (Rails db: Rollback bricht die letzte Migration ab.)Recommended Posts