8 Stimmen

Tabellen in Ruby-on-rails 3 durch Migrationen erstellen?

Ich versuche, den Prozess der Erstellung von Tabellen in Ruby-on-rails 3 zu verstehen.

Ich habe über Migrationen gelesen. Ich soll also Tabellen erstellen, indem ich die Dateien in:

Database Migrations/migrate/20100611214419_create_posts
Database Migrations/migrate/20100611214419_create_categories

aber sie wurden von erzeugt:

rails generate model Post name:string description:text
rails generate model Category name:string description:text

Bedeutet dies, dass ich jedes Mal, wenn ich eine Tabelle erstellen möchte, den Befehl "rails generate model" verwenden muss?

Was ist, wenn ich eine Migrationsdatei erstelle, aber Spalten hinzufügen möchte? erstelle ich eine weitere Migrationsdatei, um diese hinzuzufügen, oder bearbeite ich die vorhandene Migrationsdatei direkt? der Leitfaden sagte mir, ich solle eine neue Datei hinzufügen, aber hier ist der Teil, den ich nicht verstehe. warum sollte ich eine neue Datei hinzufügen?

und wie füge ich dann eine neue Migrationsdatei für die Aktualisierung hinzu? wie lautet der Befehl? und wenn ich Spalten löschen oder bearbeiten muss, wie geht das?

rails generate model Post name:string description:text

denn der obige Befehl fügt nur Spalten hinzu.

Und wenn ich die Befehle nicht verwende, wie erstelle ich dann Migrationsdateien?

In Symfony bearbeite ich einfach eine schema.yml-Datei direkt, es gibt keine Migrationsdateien mit Versionierung und so weiter.

und ich denke, in Django erstellen Sie nur die Modelle und es wird die Datenbank-Tabellen erstellen.

Ich bin neu in RoR und möchte mir ein Bild von der Erstellung von Tabellen machen.

danke

11voto

Tomas Markauskas Punkte 11224

Wenn Sie eine Tabelle aktualisieren wollen, müssen Sie eine neue Migrationsdatei erstellen, da jede Migration nur einmal in der Datenbank ausgeführt wird. Wenn Sie also bereits eine posts Tabelle dann nach Änderung der create_posts Migration können Sie es nicht mehr ausführen.

Sie können Migrationen rückgängig machen und dann erneut ausführen. Das würde das Problem lösen, aber es würde auch die Tabelle und die darin enthaltenen Daten zerstören. Dies ist kein Problem, wenn Sie die Migration gerade erst erstellt haben und dann feststellen, dass eine Spalte fehlt. Dann können Sie die Spalte einfach zur Migration hinzufügen, ein Rollback durchführen und die Migration durchführen. Aber das sollten Sie bei einer Produktionsdatenbank nicht tun!

Um eine neue Migration zu erstellen, führen Sie einfach aus:

rails generate migration migration_name

Wenn Sie Ihre Migration als add_*_to_table können Sie auch die gleichen Argumente wie in generate model :

rails generate migration add_something_to_posts something:boolean

Dadurch wird diese Migration automatisch erzeugt:

class AddSomethingToPosts < ActiveRecord::Migration
  def self.up
    add_column :posts, :something, :boolean
  end

  def self.down
    remove_column :posts, :something
  end
end

Dies funktioniert mit remove_*_from_table zu:

rails generate migration remove_something_from_posts something:boolean

Die Migration wird sein:

class RemoveSomethingFromPosts < ActiveRecord::Migration
  def self.up
    remove_column :posts, :something
  end

  def self.down
    add_column :posts, :something, :boolean
  end
end

Hier sind einige weitere Methoden die Sie bei Ihren Migrationen verwenden können.

5voto

Garrett Punkte 7502

Um eigenständige Migrationsdateien zu erstellen, verwenden Sie:

rails generate migration your_migration_name_here

Sobald Sie die generierte Datei aufgerufen haben, können Sie jede beliebige SQL-Datei ausführen. Wenn Sie sich die anderen generierten Migrationen ansehen, erhalten Sie ebenfalls einen guten Anhaltspunkt.

In der Regel haben Sie in Rails ein Modell für jede Tabelle in Ihrer Datenbank. Ich kann mir keinen speziellen Anwendungsfall vorstellen, in dem man eine Tabelle ohne eine Art Modell für den Zugriff auf diese Daten hat. Wenn Sie einen tieferen Einblick in Migrationen erhalten möchten, gehen Sie zu aquí .

1voto

RSK Punkte 16930

Zu dieser Frage Heißt das, ich muss rails generate model Befehl jedes Mal, wenn ich eine Tabelle erstellen möchte?

Versuchen Sie Migration_für
Ich finde das hilfreich für mich. Finden Sie die Anleitung auf Blog des Autors

rails g migration_for create_table:posts add_column:posts:title:string add_column:posts:user_id:integer add_index:posts:user_id

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X