Ruby on rails 如何实现同一模型的嵌套实例?例如,类别中的类别?

Ruby on rails 如何实现同一模型的嵌套实例?例如,类别中的类别?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个分类模型,基本上就是产品将分配给什么 因此,我的类别模型如下所示: attr_accessible :name has_many :category_products do def with_products includes(:product) end end has_many :products, :through => :category_products 我想做的是在分类中有分类——这样一个产品应该可以放在男人身上,然后放在鞋子里 这样,我就可以有一个男

我有一个分类模型,基本上就是产品将分配给什么

因此,我的类别模型如下所示:

attr_accessible :name
has_many :category_products do
  def with_products
    includes(:product)
  end
end

has_many :products, :through => :category_products
我想做的是在分类中有分类——这样一个产品应该可以放在男人身上,然后放在鞋子里

这样,我就可以有一个男士下拉菜单,它可以生成男士的所有子类别,比如鞋子

但是,如果用户点击男性,他们将看到该类别中的所有产品

想法?

您可以使用gem-like将您的类别组织成一个层次结构

如果只需要一层嵌套深度,可以使用自联接

belongs_to :parent_category, class: "Category"
has_many :subcategories, class: "Category"
您还需要迁移才能将category_id添加到category表中

在app/views/categories/_form.html.erb中的category_id下拉列表中添加类别列表。您可以使用此选项为类别选择父项

然后你可以做一些事情,比如:

# Get parent category's name
<%= somecategory.parent.name %>

# Iterate through subcategories
<% someothercategory.subcategories.each do |category| %>
  <%= category.name %>
<% end %>
使用类似宝石的祖先将在处理这些类别及其关联时给你更多的灵活性

关于祖先是如何工作的:

祖先为每个节点存储从根到父的路径。 这是具体化路径数据库模式的变体。信息技术 允许祖先获取任何关系的兄弟姐妹、后代等 一个SQL查询,没有复杂的算法和 与左右值相关的不可理解性。 此外,任何插入、删除和更新仅影响节点 在受影响节点自己的子树中


我不知道祖先宝石是如何工作的,但在嵌套解决方案中,主要关注的是速度。
如果模型类别不受高频创建的约束,请尝试。它不仅使用了parent_id,还使用了:lft和:rgt列,当子对象非常非常。。。30-50个类别和数千种产品——其中之一。

我喜欢1级嵌套建议。问题是,如何引用嵌套的类别?我是否必须创建一个名为parent_category&subcategories的新表,并同时为这两个表创建子类别?我需要在我的路线中添加什么吗?rb?@marcamillion不,你不需要额外的表格或路线。它们仍然只是类别。看我的编辑。看起来很棒。如何创建子类别?例如,cat=类别1。将子类别指定给cat。我认为您可能希望使用子类别的id,但不太确定它在这里是如何工作的。谢谢。啊……我明白了……很有趣。好的,谢谢!类别表上的类别id…有点像元。了解Rails吗??