Rails: Ich Migrationsdatei dann läuft db aktualisieren: wandern, aber mein Schema wird nicht aktualisiert

StackOverflow https://stackoverflow.com/questions/1416600

Frage

Ich versuche, ein zusätzliches Feld zu einem meiner Tabellen hinzuzufügen.

Ich habe das Feld in der Migrationsdatei (unter db \ Migrate) hinzugefügt, ‚Rake db: wandern‘ lief dann die ohne Probleme lief. Mein Text-Editor sagte mir sogar meine schema.db Datei aktualisiert wurde und aktualisieren muss.

Die Schemadatei enthält nicht mein neues Feld und alle Versuche, das Feld zu referenzieren von meinen Ansichten kläglich scheitern.

Wie mache ich das? Es ist möglich, eine Tabelle mit einem zusätzlichen Feld über Schienen zu aktualisieren, ohne Drop vollständig mit und erstellen Sie die Datenbank wieder?

War es hilfreich?

Lösung

http://guides.rubyonrails.org/migrations.html#changing-existing-migrations

  

Gelegentlich werden Sie einen Fehler machen, wenn eine Migration zu schreiben. Wenn Sie bereits die Migration ausgeführt haben, dann können Sie nicht nur die Migration bearbeiten und die Migration erneut ausführen: Rails denkt, dass es bereits die Migration laufen und so wird sich nichts tun, wenn Sie rake db laufen: wandern. Sie müssen die Migration (zB mit rake db:rollback) Rollback, die Migration bearbeiten und führen rake db:migrate die korrigierte Version ausgeführt werden.

Andere Tipps

Sie sollten immer eine neue Migrationsdatei erstellen, wenn / ändern etwas in der Datenbank hinzufügen. Dies ist der Zweck der Migration. Eine Migrationsdatei sollte die Möglichkeit haben, um die neue Änderung vornehmen und die Änderung rückgängig machen. Auf diese Weise, wenn etwas schief geht oder Sie Ihre Meinung geändert können Sie leicht zu einer vorherigen Migration rückgängig zu machen.

Die Abschnitte des folgenden Link mit der Bezeichnung ‚Anatomie einer Migration‘ und ‚Schreiben einer Migration‘ könnte Ihnen behilflich sein.

http://guides.rubyonrails.org/migrations.html

Gelöst meine eigene Frage ..

Im Grunde genommen, anstatt bearbeiten Sie die ursprünglichen Migrationsdateien generiert, wenn Sie Gerüsten führen Sie eine neue Migrationsdatei erstellen, für das, was Sie wollen acheive:

http://guides.rubyonrails.org/migrations.html # Erstellen von-a-Standalone-Migration

ich das gleiche tat, wollte ich einen Feldnamen ändern und statt dessen:

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.string :commenter
      t.text :body

      # this line adds an integer column called `article_id`.
      t.references :article, index: true

      t.timestamps
    end
  end
end

I geändert

  t.text :body

t.text :comment_body

Ich habe versucht, Rechen tun

db:migrate

nichts passiert, wie in es in die Eingabeaufforderung ging wieder ohne Ausgang ..., sah ich Stack-Überlauf und diese geführt ich Rake tun

db:migrate:redo

mit sich bringen

== 20141129044056 CreateComments: reverting ===================================
-- drop_table(:comments)
   -> 0.0000s
== 20141129044056 CreateComments: reverted (0.0886s) ==========================

== 20141129044056 CreateComments: migrating ===================================
-- create_table(:comments)
   -> 0.0040s
== 20141129044056 CreateComments: migrated (0.0040s) ==========================

und dann lud ich meine Seite / Controller mit commenter_body statt Körper und es geladen perfekt.

Ich denke, das ist auch eine Lösung für das gleiche. Ich weiß nicht, ob es eine Ausgabe in den darunter Arbeiten im Modell / DB (ich bin noch sehr neu zu RoR, mein dritte Tag tatsächlich ...)

Ich konnte mein Schema mit letzteren Migrationen regenerieren durch rake db:schema:dump läuft

Sie wissen nicht, ob dies zutrifft, aber es ist einen Versuch wert. Gerade von " Agile Entwicklung mit Rails, 3. Auflage ":

Manchmal kann dies schema_migrations Tabelle Sie Probleme verursachen. Erstellen Sie zum Beispiel, wenn Sie die Migration Quelldatei und führt db:migrate, bevor Sie Schema-Definition von Anweisungen in die Datei hinzufügen, Die Datenbank wird denken, es aktualisiert wurde, und die Schema-Info-Tabelle wird die neue Version enthält Nummer.
Wenn Sie dann die vorhandene Migrationsdatei bearbeiten und ausführen db:migrate wieder, Rails wissen nicht übernehmen Sie die neuen Änderungen. Unter diesen Umständen ist es oft am einfachsten, die Datenbank zu löschen, neu erstellen es, und erneut ausführen Migration (s).

Wenn u db tun Rake: wandern dann wieder u kann nicht hinzufügen Spalte zu diesem file.You haben eine neue Migrationsdatei zu generieren, indem Schienen g Migration add_columnname_to_tablename Verwendung für das Hinzufügen, dass bestimmte Spalte und Sie rake db: migrate.That ist es !! !

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top