2016-11-21 12 views
0

Rails 5 APIのデータ集約に関するアドバイスを探しています。注文データの集計 - Ruby on Rails

シンプルなコンポーネントに分類されるシステムがあり、製品モデルと注文モデルがあります。

オーダーhas_many product_order経由の製品は、テーブルを結合します。

受注ID、価格、受注ノートを含む概要ページを含む受注のスプレッドシートを生成しています。そして、注文ごとに1つのブックにその注文の個々の製品をリストします。

は、我々はまた、出力に注文された製品のすべての集約リストと各製品の量が含まれている概要ページを必要とする、すなわち:

Product Summary Table 
--------------------- 
Name------|-Quantity 
-------------------- 
Product 1 | 10 
Product 2 | 20 

など

何に行くための最善の方法ですそのデータを集約することについて?レンダリングで〜100msの -

おかげで、あなたはAPIを使用している場合

マイク

+0

SELECT product_id、count(*)FROM product_order GROUP BY product_idクエリを使用して、各製品の数量を取得できます。 –

答えて

0

のみ、私はあなたがJSONレスポンスを期待すると仮定は、そのような場合には、あなたはJSONレスポンス(〜50ミリ秒をレンダリングするためにRABLを使用することができますMVCパターンを保持しています。コントローラでクエリを実行し、ビューコントローラ間で共有される変数に割り当てます。

@products = Product.all.includes(:product_orders)これは、今、あなたは、データベースを押すことなく関連するデータにアクセスしてRABLテンプレートでそれにアクセスすることができ、メモリにロードされたproduct_orders@productsを持つ将来n+1問題

を防ぐことができます。

RABL:あなたは既にメモリにすべてproduct_ordersをフェッチして、このテンプレートで

object false 

node :products do 
    @products.each do |p| 
    id: p.id, 
    count: p.product_orders.count 
    end 
end 

count: p.product_orders.countは、データベースにヒットしません。これは、それはMVCパターンを尊重するように私は私のAPIについては、以下のものです

"products": [ 
    { 
    id: 1, 
    count: 20 
    }, 
    { 
    id: 2, 
    count: 21 
    }, 
    ... 
] 

今レスポンスはようになります。