2016-04-20 19 views
0

私のテーブル「Stores」では、関連するレコードでいくつかのタブを表示したいと思います。関連する4つのテーブル、製品、variant_skus、master_skus、vendor_skusがあります。次のような関係があります:関連するレコードを収集する最も効率的な方法は?

store has_many :products 
product has_many :variant_skus 
variant_sku belongs_to :master_sku 
master_sku has_many :variant_skus, :vendor_skus 
vendor_sku belongs_to :master_sku 

は今、私は私のために、これらのテーブルからレコードを収集し、コントローラに含めることができるの懸念を作成しましたが、私はストアページを開くたびにそれがロードするのに非常に時間がかかりますおそらくすべての反復のためです。 IDを取得してデータベースに照会するよりも速くレコードを収集するために、関連付けを繰り返しますか?あるいは、レコードを収集する他のより効率的な方法がありますか?

when "stores" 
    @store.products.each do |product| 
    @products.push(product) 
    end 

    @products.each do |product| 
    product.variant_skus.each do |variant_sku| 
     @variant_skus.push(variant_sku) 
     @master_skus.push(variant_sku.master_sku) 
    end 
    end 
    @variant_skus = @variant_skus.uniq 
    @master_skus = @master_skus.uniq 

    @master_skus.each do |master_sku| 
    @vendor_skus.push(master_sku.vendor_skus) 
    end 
    @vendor_skus = @vendor_skus.uniq 
end 

更新:それは次のように動作します。

@products = @store.products.includes(variant_skus: {master_sku: :vendor_skus}) 
@variant_skus = @products.map(&:variant_skus).flatten.uniq 
@master_skus = @variant_skus.each.map(&:master_sku).uniq 
@vendor_skus = @master_skus.map(&:vendor_skus).flatten.uniq 

答えて

1

してみてください。@variant_skusライン上:

when "stores" 
    @products = @store.products.includes(variant_skus: {master_sku: :vendor_skus}) 
    @variant_skus = @products.map(&:variant_skus).uniq 
    @master_skus = @variant_skus.map(&:master_sku).uniq 
    @vendor_skus = @master_skus.map(&:vendor_skus).flatten.uniq 
    end 
+0

私は<0x007f9b398d0820製品>#は「未定義のメソッド 'variant_skuを取得しています。私は行を次のように変更しました: @variant_skus = @ products.map(&:variant_skus).uniq そして、その行はもうエラーを投げませんでした。次の行は次のとおりです:#のための未定義メソッド 'master_sku ' アイデア? – stoerebink

+0

コードが更新されました。乾杯! – stoerebink

+0

@stoerebinkは私の答えです。そうであれば、それを答えとして受け入れてください。 –

関連する問題