Guten Tag,
seit meiner Anmeldung 2008 habe ich Rails und Ruby im Allgemeinen etwas vernachlässigt. Jetzt bei meinem ersten Versuch selber etwas zu erstellen verdeutlichen sich noch meine Defizite. Vielleicht ist jemand so freundlich und kann mir ein paar Impulse geben.
Problem:
Im Zuge der Normalisierung von Datenbanken, wollte ich mehrere Tabellen verwenden statt einer "großen". Das verkompliziert jetzt die Art wie ich auf die Tabellen zugreifen wollte. Ich verstehe nicht wie ich Rails dazu bekomme, das zu tun was ich will.
Wo implementiere ich am besten die Logik?
Mein Kernproblem ist, das ich das Problem noch nicht erkannt habe. Annäherung: Ich will im Hintergrund eine automatische Abfrage und Auswertung der Antwort bei einem anderen Controllern. Quasi für mein Sortiment, bei der Erstellung/Erweiterung (und später bei der Anzeige von einem verfügbaren Artikel) prüfen ob ein Händler (vorher eingetragen) das Produkt hat. Quasi Name identisch, Gebinde identisch, EAN ist die selbe.
Wie mache ich es am besten? Muss ich dafür immer einen eigenen Controller erstellen? Eine eigene Datenbank-Tabelle für die Beziehungen? Gedanklich muss ich den Controller irgendwo anpassen, das er Zwischenergebnisse produziert und das "Has many" selbständig erweitert und Verknüpft.
Ich bin mit jquery und ajax auch noch Anfänger, war die Erstellung einer Bestellung mit dynamischem "einen weiteren Artikel/Position hinzufügen" auch noch schwierig. Versuchte mich mit wenig Erfolg an verschachtelten/Nested Forumalen/Forms. Zeit verschwendet hatte ich mit
railscasts.com: Complex Forms Part 3. Zwar eine sehr gute Seite, aber die dort beschriebene Methode funktioniert so nicht mehr oder mit meinem Problem. Wie macht man das Heute?
In verschiedenen Beispielen wird indirekt referenziert. Angeblich wenn die Beziehungen zwischen den Controllern stehen (has many, belongs to..). Bei mir führte aber auch das immer zu einem Fehler, als hätte mein Rails das noch nicht erkannt.
Schema:
Zitat:
Bestellung/Order:
id (integer)
oderdate (date)
trader_id (integer)
total_amount (float)
Bestellung_Einheit_Position/Order_items:
id (integer)
order_id (integer)
article_id (integer)
count (float)
amount (gloat)
Kontext bei welchem Händler bestellt wird geht aus der Bestellung/dem zu bearbeitenden Event hervor. Welcher Artikel kommt vom Artikel-Controller und so weiter.
Wie rufe ich jetzt den Order_items-New Controller auf, wenn ich doch erst Order-New geklickt hab? Wo kann ich dann die Eingabe prüfen? Fällt das bei Nested-Formularen weg?
Darf ich gar keinen Order_items Controller verwenden weil das lediglich ein Hash/Jason-Format gespeicherter Wert ist der zur "Bestellung" gehört? Gedanklich würde das einiges vereinfachen. Aber ich wollte später auch jede einzelne Position prüfen und zur virtuellen Bestandspflege eventuell heranziehen.
Zuerst dachte ich das geht irgendwie in einem Verschachtelten verfahren:
1. /orders/new aufrufen (Rails merkt sich das)
2. Immer wieder order_items/new aufrufen um eine Zeile per Ajax und Co hinzuzufügen...
-Zwischen jedem Order_items/new kann ich Prüfen ob das Objekt doppelt drin ist, ob es existiert usw, Berechnungen bei der Aktallisierten Anzeige der Menge und des Betrages-
3. Zusammenfassung anzeigen.
4. /orders GET die Bestellung speichern.
Nach dieser Gedanklichen Niederschrift vermute ich das ich das Order-Objekt erst mal erstellen muss anschließend auf ein Order_items/show verweisen muss, welches aber direkt an der einen Bestellung hängt schließlich will ich nicht alle Jemals hinzugefügten Order_items ansehen.
Ich lasse das jetzt erst mal hier so stehen und denke noch mal etwas drüber nach, beziehungsweise schreibe etwas neues wenn sich bei mir was tut oder das Problem konkreter wird. Jegliche Verbesserungsvorschläge/Kommentare Anregungen nehme ich gerne entgegen.
Meine Gedanken finden es einfacher die Datenbankeinträge direkt zu verarbeiten/manipulieren/prüfen. Wahrscheinlich weil ich und Rails noch nicht warm geworden bin. Im Grunde muss ich jede Information bei Rails doch in Datenbanken speichern, damit sie nicht verloren geht oder? Zur Weiterverarbeitung dann aber auch gleich wieder Abfragen. Wo gibt es bei Rails die globalen Variablen? Welche Möglichkeiten habe ich da? Muss ich dafür extra einen Bestellung_Season erstellen?
Vielen dank fürs Zuhören, jetzt habe ich zumindest wieder neue Ideen und stehe nicht mehr an einem toten Ende.