Dynamische Erstellung von Tabellen und Modellen in Ruby on Rails 3

8

Bear mit mir auf diesem.

In einer App, die ich gerade bearbeite, können Benutzer CSV-Dateien mit beliebigen Kopfzeilen und Spalten in das System hochladen. Die CSV wird dann verwendet, um eine Tabelle in der Datenbank und die Daten zu erzeugen, auf die dann über das System zugegriffen werden kann, für verschiedene Zwecke, Suchen, Sortieren von Updates etc.

Das alte (und jetzt nicht mehr existierende) System war in PHP und wurde gut verarbeitet, obwohl es ziemlich unordentlich mit vielen rohen SQL-Tabellen war, um die Tabellen und die Framework-unterstützten magischen Modelle zu erstellen. Wenn die Tabelle existierte, tat das Objekt ohne Klasse in einer Modelldatei definiert werden)

Die neue Version wird in RoR3 geschrieben, und ich muss noch einen Weg finden, dies zu tun. Ich habe es geschafft, die Tabellenerstellung durch Aufruf von Migrationstools innerhalb eines Modells zu sortieren (nicht sehr Rails-ich weiß, aber muss müssen ...), aber ich finde keine Möglichkeit, eine Verknüpfung zu der neuen Tabelle herzustellen, sobald sie erstellt wurde Schreiben Sie Daten, bauen Sie Beziehungen oder irgendetwas anderes auf.

Was ich hoffe, ist entweder,

a) Jemand hier hat einen besseren Weg dies zu tun als Tabellen und Modelle im laufenden Betrieb zu erstellen (eine Warnung hier, diese Dateien können 100'000 Datensätze und verschiedene Felder enthalten, so dass eine einzelne Tabellenoption nicht funktioniert gut) dh ein besseres Datenbankdesign für dieses Problem.

oder

b) kann mir sagen, wie man das Modellproblem löst.

Ich habe mir Dr. Nic's Magic Model Juwel für RoR angesehen, aber es scheint nicht in RoR3 zu funktionieren, außer ich mache etwas falsches

Entschuldigung für die Textwand, freuen Sie sich auf Vorschläge

Vielen Dank im Voraus

    
fullybaked 09.04.2011, 07:44
quelle

2 Antworten

9

OK, ich habe eine Lösung, denke ich, aber wenn es schön ist, ist das etwas anderes.

Grundsätzlich erstellen Sie eine Tabelle im laufenden Betrieb, indem Sie SQL über Rail ActiveRecord ausführen. Als nächstes benutze ein Model und ändere seinen Namen (Model.table_name).

In etwa so:

%Vor%

Dann können Sie bei einem Modell den Tabellennamen im laufenden Betrieb ändern, zB:

%Vor%

Ok, eines Ihrer Probleme ist die Modelllogik & amp; Verbände. Sie sind irgendwie begrenzt, aber vielleicht können Sie das umgehen.

Nicht wirklich beste Praktiken, denke ich, aber wenn Sie das brauchen. Ich denke, es könnte funktionieren!

    
Roger 22.06.2012 12:45
quelle
5

Ich habe eine App implementiert, mit der man eine CSV-Datei hochladen und die Datei in ein aktives Rekordmodell konvertieren kann. Sie können dieses Repository auschecken.

Besuchen Sie Ссылка

Hier ist eine kleine Idee, wie es erreicht wurde:

%Vor%

Es gibt auch ein paar Fehler damit, es ist schwierig, Assoziationen und Validierungen hinzuzufügen

    
Athul Santhosh 03.02.2017 10:11
quelle