在我的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 :(得分:0)
不太优雅的红宝石解决方案
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