2017-09-23 5 views
0

私はウェアハウスアプリを構築しています。私は現在の在庫データ(補充 - 販売)を場所/インデックス内の各場所について見たいと思っています。今私はモデルでこれを行うための計算がありますが、場所/インデックスページをロードするたびに計算に時間がかかります。Railsウェアハウスアプリ

テーブルを整理してストックデータをデータベースに保存し、ページを開くたびにすべてを再計算する最良の方法は何ですか? enter image description here

私の考えは補充/販売を作成したときにバックグラウンドで再計算します証券株式テーブルを追加することです:

は、ここに私のスキーマです。どうすれば設定できますか?

答えて

0

明らかにこれには1つの正しい方法がありません。しかし、ここに私のテイクです。

あなたが持つことができ、1対1 locationstock、とhas_manyの間:stock間とproductて。異なる時刻に異なるproductが異なる価格を持つ可能性があるため、ここで価格/コストをキャプチャしたいので、結合テーブルを使用する必要があります。この方法で、正しい価格/コストを計算することができます。 (それがrelaventの場合productcostを追加することができます)。同様に、costの列をreplenishmentに追加して、補充時にコストを回収し、priceの列をsaleに追加して、販売時に価格を取得する必要があると思います。

0

これは非常に単純化されており、テストしていないのでエラーが発生する可能性があります。

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 

販売または補充を作成、変更、または削除するたびにストックモデルの数量を更新する必要があります。あるいは、定期的に数量を更新するバックグラウンドジョブを持つこともできます。

ロケーションと製品のモデルで同じことができます。数量属性を追加し、それぞれの販売または補充の後に更新するか、バックグラウンドジョブを使用することができます。この場合、 "total_stock"メソッドは必要ありません。

関連する問題