Ruby on Rails - Migrationen
Mit Rails Migration können Sie Ruby verwenden, um Änderungen an Ihrem Datenbankschema zu definieren. So können Sie mithilfe eines Versionskontrollsystems die Dinge mit dem tatsächlichen Code synchronisieren.
Dies hat viele Verwendungszwecke, einschließlich -
Teams of developers - Wenn eine Person ein Schema ändert, müssen die anderen Entwickler nur aktualisieren und "Rake Migrate" ausführen.
Production servers - Führen Sie "Rake Migrate" aus, wenn Sie eine neue Version einführen, um die Datenbank ebenfalls auf den neuesten Stand zu bringen.
Multiple machines - Wenn Sie sowohl auf einem Desktop als auch auf einem Laptop oder an mehreren Standorten entwickeln, können Sie mithilfe von Migrationen alle synchronisieren.
Was kann die Rails-Migration tun?
- create_table (Name, Optionen)
- drop_table(name)
- rename_table (alter_name, neuer_name)
- add_column (Tabellenname, Spaltenname, Typ, Optionen)
- Umbenennungsspalte (Tabellenname, Spaltenname, neuer Spaltenname)
- change_column (Tabellenname, Spaltenname, Typ, Optionen)
- remove_column (Tabellenname, Spaltenname)
- add_index (tabellenname, spaltenname, indextyp)
- remove_index (Tabellenname, Spaltenname)
Migrations support all the basic data types - Im Folgenden finden Sie eine Liste der Datentypen, die von der Migration unterstützt werden. -
string - für kleine Datentypen wie einen Titel.
text - für längere Textdaten wie die Beschreibung.
integer - für ganze Zahlen.
float - für Dezimalstellen.
datetime and timestamp - Speichern Sie Datum und Uhrzeit in einer Spalte.
date and time - Speichern Sie entweder nur das Datum oder nur die Uhrzeit.
binary - zum Speichern von Daten wie Bildern, Audio oder Filmen.
Boolean - zum Speichern von wahren oder falschen Werten.
Valid column options are - Das Folgende ist die Liste der gültigen Spaltenoptionen.
limit (: limit => "50")
default (: default => "bla")
null(: null => false impliziert NOT NULL )
NOTE - Die von Rails Migration ausgeführten Aktivitäten können über eine beliebige Front-End-GUI oder direkt über die SQL-Eingabeaufforderung ausgeführt werden. Mit Rails Migration sind all diese Aktivitäten jedoch sehr einfach.
Weitere Informationen hierzu finden Sie in der Rails-API .
Erstellen Sie die Migrationen
Hier ist die generische Syntax zum Erstellen einer Migration:
application_dir> rails generate migration table_name
Dadurch wird die Datei db / migrate / 001_table_name.rb erstellt. Eine Migrationsdatei enthält die grundlegende Ruby-Syntax, die die Datenstruktur einer Datenbanktabelle beschreibt.
NOTE - Vor dem Ausführen des Migrationsgenerators wird empfohlen, die vorhandenen Migrationen zu bereinigen, die von Modellgeneratoren generiert wurden.
Wir werden zwei Migrationen erstellen, die unseren drei Tabellen entsprechen - books and subjects.
Die Buchmigration sollte wie folgt sein:
tp> cd library
library> rails generate migration books
Der obige Befehl generiert den folgenden Code.
Die Themenmigration sollte wie folgt sein:
tp> cd library
library> rails generate migration subjects
Der obige Befehl generiert den folgenden Code.
Beachten Sie, dass Sie beim Erstellen von Migrationen Kleinbuchstaben für Buch-, Betreff- und Pluralform verwenden. Dies ist ein Rails-Paradigma, dem Sie bei jeder Erstellung einer Migration folgen sollten.
Bearbeiten Sie den Code
Gehen Sie zum Unterverzeichnis db / migrate Ihrer Anwendung und bearbeiten Sie jede Datei einzeln mit einem einfachen Texteditor.
Ändern Sie 001_books.rb wie folgt:
Die ID-Spalte wird automatisch erstellt. Tun Sie dies also auch hier nicht.
class Books < ActiveRecord::Migration
def self.up
create_table :books do |t|
t.column :title, :string, :limit => 32, :null => false
t.column :price, :float
t.column :subject_id, :integer
t.column :description, :text
t.column :created_at, :timestamp
end
end
def self.down
drop_table :books
end
end
Die Methode self.up wird bei der Migration auf eine neue Version verwendet. self.downwird verwendet, um Änderungen bei Bedarf zurückzusetzen. In diesem Moment wird das obige Skript zum Erstellen verwendetbooks Tabelle.
Ändern Sie 002_subjects.rb wie folgt:
class Subjects < ActiveRecord::Migration
def self.up
create_table :subjects do |t|
t.column :name, :string
end
Subject.create :name => "Physics"
Subject.create :name => "Mathematics"
Subject.create :name => "Chemistry"
Subject.create :name => "Psychology"
Subject.create :name => "Geography"
end
def self.down
drop_table :subjects
end
end
Das obige Skript wird zum Erstellen verwendet subjects Tabelle und erstellt fünf Datensätze in der Betreff-Tabelle.
Führen Sie die Migration aus
Nachdem Sie alle erforderlichen Migrationsdateien erstellt haben. Es ist Zeit, sie für die Datenbank auszuführen. Wechseln Sie dazu zu einer Eingabeaufforderung, wechseln Sie in das Bibliotheksverzeichnis, in dem sich die Anwendung befindet, und geben Sie einrake migrate wie folgt -
library> rake db:migrate
Dadurch wird eine "schema_info" -Tabelle erstellt, die nicht vorhanden ist und die aktuelle Version der Datenbank verfolgt. Jede neue Migration ist eine neue Version, und alle neuen Migrationen werden ausgeführt, bis Ihre Datenbank die aktuelle Version hat.
Rakeist ein Ruby-Build-Programm ähnlich dem Unix- Make- Programm, das Rails nutzt, um die Ausführung komplexer Aufgaben wie das Aktualisieren der Datenbankstruktur usw. zu vereinfachen.
Ausführen von Migrationen für Produktions- und Testdatenbanken
Wenn Sie angeben möchten, welche Rails-Umgebung für die Migration verwendet werden soll, verwenden Sie die Shell-Variable RAILS_ENV.
Zum Beispiel -
library> export RAILS_ENV = production
library> rake db:migrate
library> export RAILS_ENV = test
library> rake db:migrate
library> export RAILS_ENV = development
library> rake db:migrate
NOTE- Verwenden Sie unter Windows "set RAILS_ENV = Production" anstelle des Exportbefehls .
Was kommt als nächstes?
Jetzt haben wir unsere Datenbank und die erforderlichen Tabellen zur Verfügung. In den beiden folgenden Kapiteln werden zwei wichtige Komponenten untersucht, Controller (ActionController) und View (ActionView).
- Controller erstellen (Action Controller).
- Ansichten erstellen (Aktionsansicht).