[RUBY] [Rails] Ich habe etwas über Migrationsdateien gelernt! (Hinzufügen einer Spalte zur Tabelle)

Einführung

Als ich mit Rails arbeitete, bemerkte ich, dass es viele Dateien und Befehle gab, von denen ich irgendwie wusste, dass sie existieren, aber ich verstand nicht ganz, was sie taten. Eine davon ist die Migrationsdatei.

Wenn ich ein Modell erstelle, weiß ich nicht, warum eine Migrationsdatei erstellt wird, und wenn ich "Rails db: migrate" eingebe, werden diese als Tabellendaten in "schema.rb" angezeigt ... Das war die Anerkennung, aber ich werde tiefer graben und es erklären!

Was ist eine Migrationsdatei?

Die Migrationsdatei ist eine Entwurfszeichnung zum Generieren der Datenbank. Durch Ausführen der Migrationsdatei wird außerdem eine Datentabelle generiert, die auf den beschriebenen Inhalten basiert.

Generieren Sie eine Migrationsdatei

Wenn Sie ein Modell erstellen, indem Sie Folgendes in das Terminal eingeben, wird automatisch eine Migrationsdatei generiert.

Grundlegende Syntax


Schienen g Modell Modellname#Hier lautet der Modellname "Buch"

db/migrate/20201114044025_create_books.rb


class CreateBooks < ActiveRecord::Migration[5.2]
  def change
    create_table :books do |t|
      t.timestamps
    end
  end
end

Im Ausgangszustand, wenn die Migrationsdatei abgeschlossen ist, können Sie sehen, dass standardmäßig nur "t.timestamps" aufgelistet ist. Dies fügt der Spalte created_at hinzu, was das Erstellungsdatum und die Erstellungszeit bedeutet, und updated_at, was das Aktualisierungsdatum und die Aktualisierungszeit bedeutet, zur Spalte.

Lassen Sie uns nun die von uns erstellte Migrationsdatei ausführen! Ich habe das Gefühl, dass es nicht genug Spalten gibt, die ich tatsächlich brauche, aber ich wage es, es so zu lassen, wie es ist!

Führen Sie die Migrationsdatei aus

Die erstellte Migrationsdatei wird durch Eingabe des folgenden Befehls im Terminal gelesen und in der Datenbank angezeigt.

Befehl


rails db:migrate

Überprüfen Sie den Status der Migrationsdatei

Dieses Mal habe ich nur eine Migrationsdatei erstellt. Ich denke, Sie können mehrere Modelle gleichzeitig erstellen (oder besser gesagt, es gibt mehr). Wenn Sie in einem solchen Fall überprüfen möchten, wie weit die von Ihnen erstellte Migrationsdatei ausgeführt wird, geben Sie den folgenden Befehl in das Terminal ein.

Befehl


rails db:migrate:status

Anschließend wird der aktuelle Status der Migrationsdatei an das Terminal ausgegeben.

Terminal


Status   Migration ID    Migration Name
--------------------------------------------------
  up     20201114044025   Create books

Die Migrationsdatei, die aktiv ist, wird bereits ausgeführt, sodass sie auch dann nicht gelesen wird, wenn Sie den Befehl Rails db: migrate eingeben. Wenn Sie also eine Migrationsdatei bearbeiten, die beim Erstellen einer Spalte mit dem falschen Namen "up" ist, wird sie nicht gelesen und ist bedeutungslos.

Referenz: [Rails] Ausführliche Erklärung der Migrationsdateien!

Was ist, wenn Sie der soeben erstellten Büchertabelle eine neue Spalte hinzufügen möchten? Lassen Sie uns vorerst die Schemadatei überprüfen!

Was ist eine Schemadatei?

Wenn die Migration ausgeführt wird, wird eine Datei mit dem Namen "schema.rb" im Ordner "db" erstellt. Schauen wir uns sofort den Inhalt an.

db/schema.rb


ActiveRecord::Schema.define(version: 2020_11_14_044025) do
  create_table "books", force: :cascade do |t|
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end
end

Es scheint, dass die Tabelle erfolgreich erstellt wurde. Die Beschreibung force :: cascade ermöglicht das erneute Laden des Schemas, wenn der externe Schlüssel korrekt ist. Fügen wir nun hier eine Spalte mit dem Namen "Titel" hinzu!

So fügen Sie eine Spalte hinzu

Es gibt zwei Möglichkeiten, einer vorhandenen Tabelle Spalten hinzuzufügen.

  1. Erstellen Sie eine neue Migrationsdatei und fügen Sie Spalten hinzu
  2. Fügen Sie eine Spalte mit Rails db: Rollback hinzu

① Erstellen Sie eine Migrationsdatei, um Spalten hinzuzufügen

Geben Sie in diesem Fall den folgenden Befehl in das Terminal ein

Befehl


Schienen g Migration Hinzufügen eines Spaltennamens zum Hinzufügen zum Tabellennamen zum Hinzufügen des Spaltennamens zum Hinzufügen:Schimmel

In diesem Fall sieht es so aus:

Terminal


rails g migration AddTitleToBooks title:string

Anschließend wird die folgende Migrationsdatei erstellt.

Migrationsdatei


class AddTitleToBooks < ActiveRecord::Migration[5.2]
  def change
    add_column :books, :title, :string
  end
end

Führen Sie danach die Migrationsdatei aus und die Spalte "Titel" wird der Tabelle hinzugefügt.

Befehl


rails db:migrate

② Fügen Sie eine Spalte mit Rails db: Rollback hinzu

Befehl


rails db:migrate:rollback

Durch Eingabe dieses Befehls im Terminal wird die neueste Version der Migrationsdatei auf den Stand vor "Rails DB: Migration" zurückgesetzt. In diesem Fall ändert sich die Terminalanzeige wie folgt.

Terminal


Status   Migration ID    Migration Name
--------------------------------------------------
 down   20201114044025    Create books  #Es geht von oben nach unten! !! !! !!

Mit anderen Worten, wenn Sie von "hoch" zu "runter" wechseln, wird die Datenbank wieder auf den Stand vor "Rails db: migrate" zurückgesetzt. Da wir vor db: migrate zurückgekehrt sind, können wir der zuerst erstellten Migrationsdatei die Spalte title hinzufügen.

db/migrate/20201114044025_create_books.rb


class CreateGenres < ActiveRecord::Migration[5.2]
  def change
    create_table :books do |t|
      t.string :title    #Fügen Sie hier eine Titelspalte hinzu! !! !! !!
      t.timestamps
    end
  end
end

Wenn Sie danach die Migrationsdatei wie in Muster (1) ausführen, wird die Spalte "Titel" hinzugefügt.

Befehl


rails db:migrate

db/schema.rb


ActiveRecord::Schema.define(version: 2020_11_14_044025) do
  create_table "books", force: :cascade do |t|
    t.string "title"  #Eine Titelspalte wurde hinzugefügt! !! !! !!
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end
end

abschließend

Das Ändern der Migrationsdatei ist oft sensibler als erwartet, daher wurde ich daran erinnert, dass ich mit einem soliden Verständnis für das Timing und die Reihenfolge daran arbeiten sollte. Ich habe noch etwas gelernt! !!

Recommended Posts

[Rails] Ich habe etwas über Migrationsdateien gelernt! (Hinzufügen einer Spalte zur Tabelle)
[Rails] Verarbeitung nach Hinzufügen einer Spalte zur Entwicklertabelle
[Rails] Informationen zu Migrationsdateien
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
[Rails] Ich habe den Unterschied zwischen Ressourcen und Ressourcen untersucht
[Rails] So ändern Sie den Spaltennamen der Tabelle
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Über die Sprache, die von nun an zu lernen ist
Migrationsdatei zum Hinzufügen eines Kommentars zur Rails-Tabelle
Wenn Sie mit dem Befehl "Rails Generate Migration" eine Spalte vom Typ "String" mit begrenzter Länge hinzufügen möchten
[Persönliches Memo] Ich habe etwas über Modifikatoren gelernt
Beachten Sie, dass Junit 4 zu Android Studio hinzugefügt wurde
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, die Sitzung in Rails zu organisieren
[Rails] Ich habe etwas über Datenbankdatentypen gelernt!
Code zum Verbinden von Rails 3 mit PostgreSQL 10
So erstellen Sie eine eindeutige Datenkombination in der Schienen-Zwischentabelle
Ein Memo über den Fluss von Rails und Vue
Rails "So löschen Sie NO FILE-Migrationsdateien"
[Rails] Ich möchte das Linkziel von link_to auf einer separaten Registerkarte anzeigen
Tokoro habe ich in der Migration von Wicket 7 auf 8 umgeschrieben
[Ruby on Rails] So ändern Sie den Spaltennamen
Ich möchte ein kleines Symbol in Rails verwenden
[Rails] Ich weiß nicht, wie ich das Modell verwenden soll ...
Ich möchte eine Funktion in der Rails Console definieren
Eine Geschichte über das Bemühen, JAR-Dateien zu dekompilieren
Ein Memorandum über Tabellendatentypen und -befehle (Rails)
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Informationen zu dem Fehler, der beim Hinzufügen eines Spaltennamens in Rails aufgetreten ist (Rails DB: Migrieren, Rails DB: Rollback, Hinzufügen).
[Rails Tutorial Kapitel 2] Was tun, wenn Sie einen Fehlern im Spaltennamen machen?
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
[Anfänger] Ich möchte die Migrationsdatei ändern.
Ich habe versucht, TabLayout unter Android eine Trennlinie hinzuzufügen
[Rails] [Bootstrap] Ich möchte die Schriftgröße entsprechend ändern
So schreiben Sie eine Migration vom Rails-Datums- / Uhrzeittyp zum Datumstyp
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich möchte eine Methode aufrufen und die Nummer zählen
Ein Hinweis zum Seed-Feature von Ruby on Rails
Ich möchte dem select-Attribut einen Klassennamen geben
[Ruby] Ich möchte die Reihenfolge der Hash-Tabelle umkehren
[Controller] Ich möchte den numerischen Wert einer bestimmten Spalte aus der Datenbank abrufen (mein Memo).
Wie gehe ich mit dem Typ um, den ich 2 Jahre lang über das Schreiben eines Java-Programms nachgedacht habe?
Hinweise zum Umfang
[Schienen] Spalte zum Entwickeln hinzufügen
Informationen zum Hinzufügen einer ähnlichen Funktion
[Rails] Löschen Sie die Migrationsdatei
Zurücksetzen der Migrationsdatei
Was ich über Kotlin gelernt habe
Ich möchte rekursiv nach Dateien in einem bestimmten Verzeichnis suchen