2017-09-23 1 views
0

Ich baue eine Lager App. Ich möchte die aktuellen Bestandsdaten (Nachschub - Verkauf) für jeden Standort in Orten/Index sehen. Jetzt habe ich eine Berechnung im Modell, um dies zu tun, aber es dauert eine lange Zeit, um jedes Mal zu berechnen, wenn ich die Orte/Indexseite lade.Schienen Lager App

Was ist der beste Weg, um Tabellen zu organisieren, um Bestandsdaten in der Datenbank persistent zu halten und alles nicht jedes Mal neu zu berechnen, wenn ich eine Seite öffne?

Hier ist mein Schema: enter image description here

Meine Idee ist es, ein Lager Tabelle hinzuzufügen, die im Hintergrund neu berechnet werden würden, wenn ein Nachschub/Verkauf erstellt wird. Wie kann ich es einrichten?

Antwort

0

Offensichtlich hat dies keinen richtigen Weg. Aber hier ist meine Meinung.

können Sie haben eine Eins-zu-eins zwischen location und stock und ein has_many: durch zwischen stock und product. Sie möchten wahrscheinlich den Preis/die Kosten hier erfassen, da verschiedene product zu unterschiedlichen Zeiten unterschiedliche Preise haben können, so dass Sie die Join-Tabelle verwenden müssen. Auf diese Weise können Sie den korrekten Preis/Kosten berechnen. (Sie können cost zu product hinzufügen, wenn es relavent ist). Ebenso denke ich, dass Sie eine cost Spalte zu replenishment hinzufügen müssen, um zum Zeitpunkt des Nachfüllens zu erfassen, und eine price Spalte zu sale, um den Preis zum Zeitpunkt des Verkaufs zu erfassen.

0

Dies ist extrem vereinfacht und kann Fehler haben, da ich es nicht getestet habe.

class Stock < ApplicationRecord 
    belongs_to :product 
    belongs_to :location 
end 

class Product < ApplicationRecord 
    has_many :stocks 

    #product stock in all locations 
    def total_stock 
    stocks.sum(:quantity) 
    end 
end 

class Location < ApplicationRecord 
    has_many :stocks 

    #stock of all products in this location 
    def total_stock 
    stocks.sum(:quantity) 
    end 
end 

class Sale < ApplicationRecord 
    belongs_to :stock 
end 

class Replenishment < ApplicationRecord 
    belongs_to :stock 
end 

Sie müssen die Menge im Bestandsmodell jedes Mal aktualisieren, wenn Sie Verkäufe oder Nachschub anlegen, ändern oder löschen. Oder Sie können einen Hintergrundjob haben, um Mengen regelmäßig zu aktualisieren.

Sie könnten das gleiche in Standort und Produktmodelle tun. Sie könnten ein Mengenattribut hinzufügen und es nach jedem Verkauf oder Nachschub aktualisieren oder einen Hintergrundauftrag verwenden. In diesem Fall benötigen Sie nicht die Methode "total_stock".