具有多个父项和多个子项的树数据库结构

时间:2013-09-21 00:22:52

标签: ruby-on-rails

所以我知道对于类别的树结构,你可以使用类似的东西:

class Category < ActiveRecord::Base
  has_many :children, :class_name => "Category"
  belongs_to :parent, :class_name => "Category" 
end

类别db

  • id(整数)
  • parent_id(整数)
  • name(string)

但是,你如何才能使一个类别有多个父母以及多个孩子呢?我想我需要添加一个child_id(整数),但模型看起来是什么样的?

1 个答案:

答案 0 :(得分:0)

您可以拥有任意数量的父母和孩子。您的child_id不属于表,只有parent_id。

让我举个不同的例子。

一棵树有很多叶子,还有很多虫子。树属于森林,属于人。

所以模型看起来像这样:

class Tree < ActiveRecord::Base
  has_many :leaves
  has_many :bugs
  belongs_to :forest
  belongs_to :person
end

Tree表格将具有forest_idperson_id属性。 Bug表格为tree_idLeaf表格分别为tree_id。如果您有更多问题,请与我们联系。

编辑:

为了对作为其父级的模型进行循环引用,您应该能够简单地执行此操作。

class Category < ActiveRecord::Base
  has_many :categories
end

这里会发生Category表应该得到一个category_id字段。只要在表数据中正确设置了category_id引用,您就可以在模型中拥有任意数量的父项和子项。所以说你有:

name | id | category_id
   a | 1  | 1
   b | 2  | 1
   c | 3  | 1

使用ActiveRecord关联,您应该能够浏览此模型。我认为诀窍是将Category: a设置为自己的父,因为它是根。