2009-08-23 130 views
4

我试图让这个工作有麻烦。我有一个项目模型,每个项目可以有其他项目或没有任何东西。Rails中的递归模型

那么这是可能的还是我需要做一些魔术?

回答

6

您可以使用acts as tree plugin或建立它你自己:

belongs_to    :parent, 
          :foreign_key => "parent_id", 
          :class_name => "Item" 

has_many     :children, 
          :foreign_key => 'parent_id', 
          :class_name => 'Item', 
          :order => 'created_at ASC', 
          :dependent => :delete_all 
+5

替代a_a_tree是acts_as_nested_set这对于读操作更好的性能。 – 2009-08-24 01:04:30

0

有可能是一些AR建宏或库插件/宝石来处理最不离奇的使用情况,但:尚不清楚,如果你在谈论一个

  • 连接表/ Actve纪录协会,(异构relationsip ,2或3台)
  • 组嵌套/ acts_as_tree,在一个表中(类似对象的树)或
  • 单个表继承,在一个表中有些异构对象

或者,最凌乱的东西, - 实体 - 属性 - 值表(EAV)设计

http://en.wikipedia.org/wiki/Entity-Attribute-Value_model