限制类别页面上产品列表中子类别的项目数量?
问题描述:
在我的rails 4.2应用程序中,我显示了属于属于某个类别的几个不同子类别的页面中的项目列表。我也在子类别的页面上显示列表项目。如上所述,在类别页面上,我想显示来自每个所属子类别的最新5个项目,我不会仅显示属于一个类别的所有项目,这与我的以下查询发生。限制类别页面上产品列表中子类别的项目数量?
我的分类模型
has_many :products, through: :subcategories
我的子类模型
has_many :products, dependent: :destroy
belongs_to :category, touch: true
我当前的查询
@products = @category.products.published.relevant(Time.zone.today).recent
.includes(:subcategory).limit(80)
我应该如何构建我的查询来限制产品从一个子类别5 ,以便该页面包含来自不同类别的产品?
答
甲小于优雅红宝石溶液
products_count = 0
subcatagories_count = {}
@products = []
category.
products.published.
relevant(Time.zone.today).
recent.includes(:subcategory).
find_each(batch: 80) do
subcatagories_count[product.subcatagory_id] ||= 0
if subcatagories_count[product.subcatagory_id] < 5
@products << product
products_count += 1
subcatagories_count[product.subcatagory_id] += 1
break if products_count >= 80
end
end
- 荷载在80处的时间。
- 通过它们循环并将它们添加到@products 如果子码标识尚未使用5次
- 留下循环一次选择80个产品。
- 如果前80个匹配,只会从数据库加载一次。
- 也是会不断搜索,直到它找到80或用完的产品
只是为了澄清,你是想在产品类别的最后80个产品,但它从任何单一subcatagory限制5? –