Erstellen und aktualisieren Sie das Modell mit 2 verwandten Modellen

9

Ich habe diese Modelle

%Vor%

Mein Buch ist:

%Vor%

Beim BooksController:

%Vor%

All das funktioniert gut. Und Accounting Datensätze werden hinzugefügt und gelöscht, wenn commodity_ids aktualisiert werden. (1)

Jetzt muss ich ein neues Modell hinzufügen: Company , da Book und Commodity von allen Firmen geteilt werden, Accounting muss zu company gehören und wird auch nicht auf dem ganzen System geteilt. Und Accounting wird zu:

%Vor%

Das Company -Modell:

%Vor%

Accounting ist mehr als eine Beziehung zwischen Waren und Büchern (und Unternehmen), es stellt auch ein Geschäftsmodell dar.

Die Einschränkung hier ist: Wenn ein neues Commodity zu einem Book hinzugefügt wird, dann muss ein neues Accounting für jedes Company erstellt werden. (2)

Ich habe versucht, Book mit companies , bis accountings zu verknüpfen. Aber es funktioniert nicht. Auch wenn es nicht das Geschäftsmodell darstellt und Buch sich nicht um Unternehmen kümmert, denke ich, dass Buch ein guter Kandidat für die Verknüpfung der Modelle ist. (3)

Jetzt denke ich, fügen Sie ein neues Modell BookCommodity hinzu, das Bücher und Rohstoffe durch dieses Modell bezieht, und beim Speichern dieses neuen Modells die Accounting Datensätze erzeugen, die für alle companies benötigt werden. (4)

Bevor Sie dieses fünfte Modell hinzufügen, möchte ich Sie fragen, ob es eine bessere Möglichkeit gibt, dieses Zeug zu verwalten?

Bearbeitet

Bei Github finden Sie ein demo_finance -Projekt mit nur dem Code dieses Posts. Es hat 4 Zweige:

  • master : Die erste Version, bevor das Firmenmodell hinzugefügt wird, funktioniert natürlich gut. (1)
  • with_companies : Der Zweig master mit dem Unternehmensmodell und den im Buchhaltungsmodell erforderlichen Einschränkungen. (2) Dies ist ein Ausgangspunkt für Änderungen.
  • first_attempt : Der with_companies Zweig mit dem Versuch: (3). Es funktioniert nicht.
  • second_attempt : Die with_companies Verzweigung mit dem Versuch: (4). Es klappt. Es hat einen Rückruf beim Erstellen für Accounting-Erstellung, aber es wird mehr Callbacks für das Löschen von Waren bei Books # Update benötigen. Ich bin nicht ganz zufrieden mit diesem Ansatz.

Die Hauptaufgabe hier ist das Hinzufügen oder Entfernen von Waren zu einem Buch und das Aktualisieren der Buchhaltung, genau wie es bei Version (1) (Hauptverzweigung) funktioniert.

Bearbeiten Sie # 2

Ich habe das versucht:

%Vor%

aber es funktioniert nicht. Beim Update wirft es auf:

%Vor%

Ich versuche das auch:

%Vor%

Diese Build-Aktion wird jedoch nicht für Update-Bücher mit commodity_ids= aufgerufen.

    
Alejandro Babio 24.09.2015, 03:44
quelle

3 Antworten

0

Meine eigene Frage beantworten:

Ich habe diese Antwort noch nicht als die richtige ausgewählt. Weil, obwohl es funktioniert, ich denke, dass es bessere Antworten geben könnte, die das Kopfgeld verdienen würden.

Ich habe es geschafft, die Methode commodity_ids= zu überschreiben, es wird auch benötigt, um dependent: :destroy -Option zu accounting hinzuzufügen, und scope -> {uniq} auf commodities.

%Vor%

Wird von Grund auf auf der Konsole ausgeführt:

%Vor%     
Alejandro Babio 30.09.2015, 12:26
quelle
0

Es ist nur eine Lösung. Danach habe ich tief deine Fragen erfahren. Ich würde sagen, Sie müssen alle Unternehmen in Ihrem Buch als Multy-Select-Optionen hinzufügen. Ich wusste, dass es vielleicht jetzt aus deiner Idee herauskommen wird, aber du musst dem Schienenfluss folgen. Sie haben gesagt, dass Sie Waren über die Buchführung auf der Grundlage von Unternehmen aktualisieren möchten und dann Daten automatisch aktualisieren möchten, aber Ihr Code diese nicht bereitstellt.

OPTION 1

Dies ist der Vorschlag:

Controller

Neuen starken Parameter hinzufügen

%Vor%

Modell

Sie müssen einige Assoziationen überarbeitet haben

%Vor%

Anzeigen

Sie können alle ausgewählten Unternehmen auswählen, damit der Benutzer keine Optionen auswählen muss (optional)

%Vor%

Versuchen Sie außerdem, BookCommodity nicht zu erstellen, um Accounting zu erstellen, weil BookCommodity gleich Accounting

ist

OPTION 2

Wenn Sie eine andere Option nicht in Ihrem Formular anzeigen möchten, können Sie Ihr Modell in den Rückruf vor dem Speichern einfügen. Dies ist nur

%Vor%

Fazit:

Diese haben Vor- und Nachteile. In den ersten Optionen kann der Benutzer das Unternehmen auswählen, der Benutzer muss jedoch zuerst das Unternehmen auswählen. Der letzte, der Benutzer wählt nicht die Firmen, aber er wird Schwierigkeiten bekommen, wenn der Benutzer die Firma des Buches oder der Ware aktualisieren will. Wie immer würde ich es bevorzugen, wenn Sie den ersten Weg verwenden, weil der Benutzer einfach zu bearbeiten ist. Das ist alles. Ich hoffe, das kann dir helfen.

    
akbarbin 27.09.2015 15:11
quelle
0

Dies ist eine perfekte Anwendung für den Akteur_as_tenant Edelstein. Ich habe dieses Juwel in einer Produktionsanwendung und es ist eine ausgezeichnete Lösung. Sie können Ihre ursprüngliche Arbeitslösung im Grunde nehmen und sie für jedes Unternehmen innerhalb Ihres Systems replizieren, indem Sie einfach dieses Juwel verwenden. Die Daten jedes Unternehmens würden in einer einzigen Datenbank isoliert sein.

Die Dokumentation ist hervorragend, aber ich würde gerne spezifische Fragen zur Implementierung beantworten. Ich kombiniere dieses Juwel mit Sorcery und Rolify zur Authentifizierung und Autorisierung, aber das liegt an dir. Ich kann viele Firmen auf einem Bild haben. In Ihrem Fall könnte Ihr Unternehmen leicht zu verschiedenen Unternehmen wechseln, aber Sie könnten einzelnen Unternehmen nur Zugriff auf ihre Daten gewähren.

Es ist eine elegante, aber einfache Lösung für solch ein komplexes Problem.

    
Richard_G 03.10.2015 03:49
quelle