[RUBY] [Rails] Fehler StandardError: Ein Fehler ist aufgetreten, alle späteren Migrationen wurden abgebrochen: Spalte "Externer Schlüsselname" in Tabelle "Tabellenname" stimmt nicht mit Spalte "ID" in "Tabellenname" überein

Fehlerinhalt

$ rails db:migrate

Ein Fehler, der auftritt, wenn der obige Befehl ausgeführt wird. Die Fehlernotation im Terminal lautet wie folgt. image.png

Teilauszug des Fehlertextes.


Column `user_id` on table `items` does not match column `id` on `users`, which has type `bigint(20)`. To resolve this issue, change the type of the `user_id` column on `items` to be :bigint. (For example `t.bigint :user_id`).

Wenn ich einen Teil des Fehlersatzes übersetze ...

Fehlersatzübersetzung.


Tabelle`items`Säule`user_id`Aber`users`Säule`id`Stimmt nicht überein. Um dieses Problem zu lösen`items`von`user_id`Spaltentyp:Wechseln Sie zu Bigint.(Zum Beispiel`t.bigint :user_id`)。

Diesmal stimmt die als externer Schlüssel in der Elementtabelle angegebene Spalte nicht mit dem Referrer überein! Das ist der Fehler.

Abhilfe (Hypothese)

Zusammenfassend empfiehlt Rails bei Verwendung externer Schlüssel den Referenztyp, sodass Sie den Bigint-Typ nicht verwenden müssen.

Da der Punkt dieses Fehlers ** nicht referenziert werden kann **, kann davon ausgegangen werden, dass in der Reihenfolge, in der die Migrationsdateien erstellt werden, ein Problem vorliegt.

In welcher Reihenfolge werden Migrationsdateien erstellt?

Abhängig von der Erstellungsreihenfolge können die Tabelle, die den externen Schlüssel verwendet (die Tabelle, die den Referenztyp beschreibt) und die referenzierte Tabelle möglicherweise nicht referenziert werden. Dieser Fehler ist aufgrund einer falschen Erstellungsreihenfolge aufgetreten.

Die Erstellungsreihenfolge ist (1) die Tabelle auf der referenzierten Seite → (2) die Tabelle, die den externen Schlüssel verwendet (die Tabelle, die den Referenztyp beschreibt). Die Problemumgehung kann durch Ändern des Erstellungsdatums und der Erstellungszeit der Migrationsdatei behoben werden.

Abhilfe (vorübergehende Überprüfung)

image.png Die Lösung besteht darin, den Zahlenteil des angehängten Bildes in der Tabelle, in der der externe Schlüssel verwendet wird, größer zu machen als in der Tabelle, auf die verwiesen wird.

Es ist ein Fehler, der aufgrund des Fehlers etwas schwer zu erraten ist.

In diesem Fall ist "20200909100000" in Ordnung, wenn "create_items" "20200909000000" ist. Übrigens ** sind die ersten 4 Ziffern der Kalender und die nächsten 4 Ziffern sind der Monat und der Tag **.

Schließlich

Ich denke, dieser Fehler tritt wahrscheinlich auf, wenn die Anzahl der Tabellen zunimmt. Wenn Sie jedoch die Zielmethode kennen, können Sie sie problemlos lösen. Lesen Sie sie daher bitte durch!

Recommended Posts

[Rails] Fehler StandardError: Ein Fehler ist aufgetreten, alle späteren Migrationen wurden abgebrochen: Spalte "Externer Schlüsselname" in Tabelle "Tabellenname" stimmt nicht mit Spalte "ID" in "Tabellenname" überein
Fehler in Docker-Schienen db: migrate (StandardError: Ein Fehler ist aufgetreten, alle späteren Migrationen wurden abgebrochen :)
Was tun, wenn ein Fehler in Rails auftritt? DB: migrate ((StandardError: Ein Fehler ist aufgetreten, diese und alle späteren Migrationen wurden abgebrochen :))
Was tun, wenn ein Fehler auftritt (StandardError: Ein Fehler ist aufgetreten, diese und alle späteren Migrationen wurden abgebrochen :) in Rails db: migrate