2012-10-10 4 views
5

Ich habe eine Rails-App, die eine bestimmte Tabelle hat, wo die Daten und sogar die Struktur dynamisch außerhalb von Rails und Ruby generiert wird. Dies ist von Entwurf, es ist eine spezielle Tabelle, wo die Struktur von dem Rest der aktiven Aufzeichnung und Beziehungen in sich abgeschlossen ist. Die Modelle, die daran arbeiten, sind ebenfalls atomar. Wieder alles mit Absicht und Absicht. Ich möchte keine spezifische Struktur für diese Tabelle, was bedeutet, dass die Spaltennamen und die Anzahl der Spalten bei jeder Initialisierung der Tabelle geändert werden können. Wenn Änderungen an der Tabellenstruktur vorgenommen werden, kann ich die Änderungen an meiner Modellklasse verwalten.Rails erstellen eine Tabelle ohne Migration

Mein Problem ist, dass die Schienen Migration Prozess scheint in die Quere kommen, und ich möchte nicht ständig hin und her zwischen Migration und Rollback, nur um den Status dieser einzelnen Tabelle zurückgesetzt werden.

Das Verhalten, das ich suche, ist buchstäblich jedes Mal, wenn ich die Daten für diese Tabelle "generiere" Ich möchte löschen, welche Tabelle möglicherweise bereits existiert (in allen Umgebungen: Produktion, Entwicklung und Test).

Gibt es eine klare Möglichkeit, den Migrationsprozess zu umgehen? Oder erstellen Sie eine spezielle Migration, die unabhängig von der Reihenfolge anderer Migrationen in der App ist?

Die gesamte Datenbank ist nicht verfügbar, aber diese eine Tabelle ist.

Gedanken darüber, wie ich dieses Verhalten erreichen könnte?

Rails 3, PostgreSQL-Datenbank, git Versionskontrolle, Heroku

Hosting

Antwort

2

Ich denke, die einfache Antwort ist „nicht-Migrationen verwenden“ - sie sollen Sie relativ elegant ein ansonsten statisches Datenbank-Schema erweitern helfen. Eine Migration macht viel mehr als das Erzeugen/Ausführen der Datendefinitionssprache (DDL) Ihrer Datenbank - sie weiß, wie man vorwärts und rückwärts geht, weiß durch eine Verknüpfung zwischen Quellcode (schema.rb) und Daten (in der schema_migrations Tabelle) wie Bestimmen Sie, welche Migrationen ausgeführt werden müssen und so weiter. Alles, was Sie brauchen, ist der Teil, der die DDL ausführt (was schließlich nur eine Art von SQL ist).

Und mindestens ein Teil davon ist here in the TableDefinition API. Die gesamte Infrastruktur, die Sie benötigen könnten, scheint vorhanden zu sein.

+0

erfolgen ich denke, es Wirklich ist das so einfach. Vielen Dank. –

2

Sie diesen Satz kann als Rake Aufgabe (es klingt wie das, was Sie es als verwenden), die die SQL enthält/Schienen-Befehle verwendet, um die Tabelle, ähnlich zu konstruieren, was mit rake db:seed

+0

Das hat funktioniert. Ich habe den ganzen Code in eine Rake-Aufgabe gesteckt und kann sie so oft ändern, wie ich brauche. Vielen Dank. –