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:
Das Company
-Modell:
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:
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.
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.
Wird von Grund auf auf der Konsole ausgeführt:
%Vor%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
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.
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.
Tags und Links ruby-on-rails ruby-on-rails-4