Informationen zu dem Fehler, der beim Hinzufügen eines Spaltennamens in Rails aufgetreten ist (Rails DB: Migrieren, Rails DB: Rollback, Hinzufügen).

Inhaltsverzeichnis

  1. Übersicht
  2. Ursache
  3. Lösung
  4. Reflexion
  5. Zusammenfassung

1. Übersicht

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.)

2. Ursache

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.

3. Lösung

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.

4. Reflexion

  1. 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.

  2. 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.

5. Zusammenfassung

  1. Es ist besser, add hinzuzufügen, um Spalten hinzuzufügen. Insbesondere beim Hinzufügen eines externen Schlüssels kann "Rails DB: Migrate" einen Fehler verursachen.
  2. Der Nummernteil der Datenbankdatei gibt das Datum und die Uhrzeit der Erstellung an.
  3. Rails db: migrate wird in der Reihenfolge vom ältesten Datum und der ältesten Uhrzeit ausgeführt. (Rails db: Rollback bricht die letzte Migration ab.)
  4. Wenn Sie eine Spalte hinzufügen, ohne add zu verwenden, und die Fehlermeldung erhalten, dass der externe Schlüssel nicht vorhanden ist, ändern Sie das Datum und die Uhrzeit des Datenbankdateinamens.

Recommended Posts

Informationen zu dem Fehler, der beim Hinzufügen eines Spaltennamens in Rails aufgetreten ist (Rails DB: Migrieren, Rails DB: Rollback, Hinzufügen).
[Rails] Was tun, wenn der Fehler Keine Datenbank ausgewählt und Unbekannte Datenbank in db: migrate angezeigt wird?
[Schienen] Über den Fehler, dass das Bild nicht in der Produktionsumgebung angezeigt wird
Was tun, wenn ein Fehler in Rails auftritt? DB: migrate ((StandardError: Ein Fehler ist aufgetreten, diese und alle späteren Migrationen wurden abgebrochen :))
[Rails Tutorial Kapitel 2] Was tun, wenn Sie einen Fehlern im Spaltennamen machen?
Was tun, wenn ein Fehler auftritt (StandardError: Ein Fehler ist aufgetreten, diese und alle späteren Migrationen wurden abgebrochen :) in Rails db: migrate
PG :: DatatypeMismatch-Fehler beim Heroku-Ausführen von Rails db: migrate
[Docker] Eine Geschichte über einen Fehler beim Erstellen von Docker
[Rails] Fehler, der bei der automatischen Bereitstellung durch Capistrano aufgetreten ist (schwerwiegend: kein gültiger Objektname: master)
Die Geschichte, mit der ich zu kämpfen hatte, weil ich "Rails db: migrate" nicht machen konnte.
Über das Symbol <%%> in Rails erb
[Rails] Migrationsdatei ändern (Rails DB: Rollback)
Es wurde ein Fehler behoben, der beim Versuch auftrat, Spark in einer Umgebung zu verwenden, in der Java 8 und Java 11 gleichzeitig vorhanden sind
[Rails] Ich habe etwas über Migrationsdateien gelernt! (Hinzufügen einer Spalte zur Tabelle)
So verweisen Sie auf eine Spalte, wenn Sie die Spaltennamensmethode in ActiveRecord überschreiben
[Rails] Migrationsdatei ändern (Rails db: rollback STEP =)
Lösung, die beim Versuch, mit Java eine Verbindung zu DB (MySQL) herzustellen, einen Fehler verursacht
Als ich an den 402-Fehler dachte, der plötzlich mitten in der Einführung von PAY.jp auftrat, gab es einen unerwarteten Ort
Fehler bei der Bundle-Installation beim Ausführen neuer Schienen
Wenn Sie sich im Klassennamen verlieren
[Rails] Lösung, wenn ein Migrationsfehler in Acts-as-Taggable-On auftritt
Ein Fehlermemorandum, das beim Erstellen einer CI / CD-Umgebung aufgetreten ist [Rails + CircleCI + Capistrano + AWS]