我有类似的类别结构:
- Cars
- 4 Door
- Sedan
- SUV
- 2 Door
- Sports
- Race
产品可以属于单个类别,并且按照我设置UI的方式,用户只能从叶节点中进行选择。
class Product < ActiveRecord::Base
belongs_to :category
end
class Category < ActiveRecord::Base
has_many :subcategories, class_name: 'Category', foreign_key: 'parent_id', dependent: :destroy
belongs_to :parent_category, class_name: 'Category'
has_many :products
end
现在,当他们浏览时,我可以列出Sedan类别的产品,没问题。但是当他们点击汽车时,它应该显示4门(轿车,SUV)和2门(运动,比赛)中的所有产品,因为它们是儿童类别。
或者当他们点击4 Door时,它应列出Sedan 和 SUV中的所有产品。这有意义吗?
如何获取给定类别中的所有产品?
答案 0 :(得分:1)
您可能希望使用递归来获取它们,方式如下:
def get_products(category)
products = category.products.to_a
category.subcategories.each do |sub|
products << get_products(sub)
end
products
end
它应属于Category
模型
答案 1 :(得分:1)
def get_products(category)
products = category.products.to_a
category.subcategories.each do |sub|
products << get_products(sub) # Change to products += get_products(sub)
end
products
end
感谢Migol,它为我解决了递归问题。但是,只是想让人们知道产品&lt;&lt; get_products 表示&#34;将数组作为对象插入数组&#34;。
我将其更改为 products + = get_products 。这实际上连接了我想要的数组。