获取属于类别或父类别的所有产品

时间:2014-03-25 23:48:35

标签: ruby-on-rails database categories product

我有类似的类别结构:

- 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中的所有产品。这有意义吗?

如何获取给定类别中的所有产品?

2 个答案:

答案 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 。这实际上连接了我想要的数组。