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
私は<0x007f9b398d0820製品>#は「未定義のメソッド 'variant_skuを取得しています。私は行を次のように変更しました: @variant_skus = @ products.map(&:variant_skus).uniq そして、その行はもうエラーを投げませんでした。次の行は次のとおりです:#のための未定義メソッド 'master_sku ' アイデア? –
stoerebink
コードが更新されました。乾杯! – stoerebink
@stoerebinkは私の答えです。そうであれば、それを答えとして受け入れてください。 –