限制类别页面上产品列表中子类别的项目数量?

问题描述:

在我的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 ,以便该页面包含来自不同类别的产品?

+0

只是为了澄清,你是想在产品类别的最后80个产品,但它从任何单一subcatagory限制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或用完的产品