【发布时间】:2016-04-20 19:58:20
【问题描述】:
对于我的表“商店”,我想显示一些带有相关记录的选项卡。有4个相关表,products、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
【问题讨论】:
标签: ruby-on-rails ruby